我已经在这个iPhone应用程序上工作了一段时间,我已经完全完成并工作了。我正在扩展的项目是从我的教授也给我访问的subversion在线存储库下载的。我不小心没有下载"根"副本或类似的东西,所以我无法提交任何更改到存储库。在导师的帮助下,我今天下载了根副本,并将我所有的类文件添加到其中,以便我可以提交更改。但是,我现在得到了3个我从未见过的奇怪错误:

未定义的符号:

"_OBJC_CLASS_$_mapListViewController", 引用自:objc-class-ref-to-mapListViewController 在mapViewController中。o

"_OBJC_CLASS_$_mapParser", 引用自:mapViewController中的objc-class-ref-to-mapParser。o

"_OBJC_CLASS_$_mapTabViewController", 引用自:objc-class-ref-to-mapTabViewController 在mapViewController中。o

劳工处:符号未找到collect2:劳工处 返回1个退出状态

这就是我得到的确切错误消息。我没有从今天早上完全工作的版本中更改任何代码。有什么建议吗?MapViewController文件似乎是导致问题的原因,所以这里也是如此:

#import "mapViewController.h"
#import "locationDetailViewController.h"
#import "DPUAnnotation.h"
#import "mapParser.h"
#import "mapListViewController.h"
#import "mapTabViewController.h"

@implementation mapViewController
@synthesize locationManager, mapView, mapAnnotations, mParser, mapListView, tabView;

@class DPUAnnotation;

+ (CGFloat)annotationPadding;
{
    return 10.0f;
}
+ (CGFloat)calloutHeight;
{
    return 40.0f;
}

- (void)gotoLocation
{
    // start off by default at DePauw campus
    MKCoordinateRegion newRegion;
    newRegion.center.latitude = 39.639348;
    newRegion.center.longitude = -86.861231;
    newRegion.span.latitudeDelta = 0.006776;
    newRegion.span.longitudeDelta = 0.006291;

    [self.mapView setRegion:newRegion animated:YES];
}

- (void)viewDidLoad {

    self.title = @"Map";
    mapView.mapType = MKMapTypeHybrid;
    mapView.showsUserLocation = YES;

    mapListView = [[mapListViewController alloc] initWithNibName:@"mapListView" bundle:nil];
    tabView = [[mapTabViewController alloc] initWithNibName:@"mapTabViewController" bundle:nil];

    if (mapAnnotations == nil)
    {
        self.mapAnnotations = [NSMutableArray array];
    } 
    else 
    {
        [mapAnnotations removeAllObjects];
    }

    UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"btn_home.png"] style:UIBarButtonItemStyleBordered target:self action:@selector(mainpageClicked)];
    [self.navigationItem setLeftBarButtonItem:backButton];

    UIBarButtonItem *mapListButton = [[UIBarButtonItem alloc] initWithTitle:@"Building List" style:UIBarButtonItemStylePlain target:self action:@selector(pushMapList)];
    [self.navigationItem setRightBarButtonItem: mapListButton];

    locationManager = [[CLLocationManager alloc] init];
    locationManager.delegate = self;
    locationManager.desiredAccuracy = kCLLocationAccuracyBest;
    [locationManager startUpdatingLocation];

    [self gotoLocation];

    self.mParser = [[[mapParser alloc] init] autorelease];
    self.mParser.delegate = self;
    [self.mParser start];

    [super viewDidLoad];
}

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:(BOOL)animated];
}

- (void)dealloc 
{
    [mapView release];
    [locationManager release];
    [mapAnnotations release];

    [super dealloc];
}

/*
 * Returns the User to the main Application Page
 */
- (IBAction)mainpageClicked
{
    NSLog(@"Return To Main page Clicked");
    [self.parentViewController dismissModalViewControllerAnimated:YES];
    [self.navigationController release];
}

- (IBAction) pushMapList
{   
    tabView = [[mapTabViewController alloc] initWithNibName:@"mapTabViewController" bundle:nil];
    tabView.mapAnnotations2 = mapAnnotations;
    [self.navigationController pushViewController:tabView animated:YES];
    [tabView release];
}

- (IBAction)addAnnotation
{   
    [self.mapView removeAnnotations:self.mapView.annotations];

    for (int i = 0; i < [mapAnnotations count]; i++)
        [mapView addAnnotation:[mapAnnotations objectAtIndex:i]];
    NSLog(@"BLAH BLAH BLAH PLEASE PRINT");
    if([mapAnnotations count] == 0)
        NSLog(@"array is empty");
}

- (void)showDetails:(id)sender
{
    NSInteger selectedIndex = [sender tag];
    DPUAnnotation *selectedObject = [mapAnnotations objectAtIndex:selectedIndex];

    [self.navigationController setToolbarHidden:YES animated:NO];

    NSURL *url = [NSURL URLWithString: selectedObject.url];

    locationDetailViewController *locationDetailView;
    locationDetailView = [[locationDetailViewController alloc] initWithNibName:@"mapDetailView" bundle:nil];
    [self.navigationController pushViewController:locationDetailView animated:YES];
    [locationDetailView.webView loadRequest: [NSURLRequest requestWithURL:url]];
    [locationDetailView release];

    [selectedObject release];
}

- (MKAnnotationView *)mapView:(MKMapView *)theMapView viewForAnnotation:(id <MKAnnotation>)annotation
{   
    // if it's the user location, just return nil.
    if ([annotation isKindOfClass:[MKUserLocation class]])
        return nil;

    if([[annotation subtitle] isEqualToString:@"Academic"])
    {
        // try to dequeue an existing pin view first
        static NSString* annotationIdentifier = @"annotationIdentifier";
        MKPinAnnotationView* pinView = (MKPinAnnotationView *)[theMapView dequeueReusableAnnotationViewWithIdentifier:annotationIdentifier];

        if (!pinView)
        {
            MKAnnotationView *annotationView = [[[MKAnnotationView alloc] initWithAnnotation:annotation
                                                                             reuseIdentifier:annotationIdentifier] autorelease];
            annotationView.canShowCallout = YES;

            UIImage *academicImage = [UIImage imageNamed:@"academic.png"];

            CGRect resizeRect;

            resizeRect.size = academicImage.size;
            CGSize maxSize = CGRectInset(self.view.bounds,
                                         [mapViewController annotationPadding],
                                         [mapViewController annotationPadding]).size;
            maxSize.height -= self.navigationController.navigationBar.frame.size.height + [mapViewController calloutHeight];
            if (resizeRect.size.width > maxSize.width)
                resizeRect.size = CGSizeMake(maxSize.width, resizeRect.size.height / resizeRect.size.width * maxSize.width);
            if (resizeRect.size.height > maxSize.height)
                resizeRect.size = CGSizeMake(resizeRect.size.width / resizeRect.size.height * maxSize.height, maxSize.height);

            resizeRect.origin = (CGPoint){0.0f, 0.0f};
            UIGraphicsBeginImageContext(resizeRect.size);
            [academicImage drawInRect:resizeRect];
            UIImage *resizedImage = UIGraphicsGetImageFromCurrentImageContext();
            UIGraphicsEndImageContext();

            annotationView.image = resizedImage;
            annotationView.opaque = NO;

            UIButton* rightButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
            NSInteger annotationValue = [self.mapAnnotations indexOfObject:annotation];
            rightButton.tag = annotationValue;
            [rightButton addTarget:self action:@selector(showDetails:) forControlEvents:UIControlEventTouchUpInside];
            annotationView.rightCalloutAccessoryView = rightButton;

            return annotationView;
        }
        else
        {
            pinView.annotation = annotation;
        }
        return pinView;
    }

    else if([[annotation subtitle] isEqualToString:@"Administrative"])
    {
        // try to dequeue an existing pin view first
        static NSString* annotationIdentifier = @"annotationIdentifier";
        MKPinAnnotationView* pinView = (MKPinAnnotationView *)[theMapView dequeueReusableAnnotationViewWithIdentifier:annotationIdentifier];

        if (!pinView)
        {
            MKAnnotationView *annotationView = [[[MKAnnotationView alloc] initWithAnnotation:annotation
                                                                             reuseIdentifier:annotationIdentifier] autorelease];
            annotationView.canShowCallout = YES;

            UIImage *administrativeImage = [UIImage imageNamed:@"administrative.png"];

            CGRect resizeRect;

            resizeRect.size = administrativeImage.size;
            CGSize maxSize = CGRectInset(self.view.bounds,
                                         [mapViewController annotationPadding],
                                         [mapViewController annotationPadding]).size;
            maxSize.height -= self.navigationController.navigationBar.frame.size.height + [mapViewController calloutHeight];
            if (resizeRect.size.width > maxSize.width)
                resizeRect.size = CGSizeMake(maxSize.width, resizeRect.size.height / resizeRect.size.width * maxSize.width);
            if (resizeRect.size.height > maxSize.height)
                resizeRect.size = CGSizeMake(resizeRect.size.width / resizeRect.size.height * maxSize.height, maxSize.height);

            resizeRect.origin = (CGPoint){0.0f, 0.0f};
            UIGraphicsBeginImageContext(resizeRect.size);
            [administrativeImage drawInRect:resizeRect];
            UIImage *resizedImage = UIGraphicsGetImageFromCurrentImageContext();
            UIGraphicsEndImageContext();

            annotationView.image = resizedImage;
            annotationView.opaque = NO;

            UIButton* rightButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
            NSInteger annotationValue = [self.mapAnnotations indexOfObject:annotation];
            rightButton.tag = annotationValue;
            [rightButton addTarget:self action:@selector(showDetails:) forControlEvents:UIControlEventTouchUpInside];
            annotationView.rightCalloutAccessoryView = rightButton;

            return annotationView;
        }
        else
        {
            pinView.annotation = annotation;
        }
        return pinView;
    }

    else if([[annotation subtitle] isEqualToString:@"University Housing"] || [[annotation subtitle] isEqualToString:@"Residence Halls"] || [[annotation subtitle] isEqualToString:@"University Duplexes"] || [[annotation subtitle] isEqualToString:@"Greek Housing"])
    {
        // try to dequeue an existing pin view first
        static NSString* annotationIdentifier = @"annotationIdentifier";
        MKPinAnnotationView* pinView = (MKPinAnnotationView *)[theMapView dequeueReusableAnnotationViewWithIdentifier:annotationIdentifier];

        if (!pinView)
        {
            MKAnnotationView *annotationView = [[[MKAnnotationView alloc] initWithAnnotation:annotation
                                                                             reuseIdentifier:annotationIdentifier] autorelease];
            annotationView.canShowCallout = YES;

            UIImage *housingImage = [UIImage imageNamed:@"housing.png"];

            CGRect resizeRect;

            resizeRect.size = housingImage.size;
            CGSize maxSize = CGRectInset(self.view.bounds,
                                         [mapViewController annotationPadding],
                                         [mapViewController annotationPadding]).size;
            maxSize.height -= self.navigationController.navigationBar.frame.size.height + [mapViewController calloutHeight];
            if (resizeRect.size.width > maxSize.width)
                resizeRect.size = CGSizeMake(maxSize.width, resizeRect.size.height / resizeRect.size.width * maxSize.width);
            if (resizeRect.size.height > maxSize.height)
                resizeRect.size = CGSizeMake(resizeRect.size.width / resizeRect.size.height * maxSize.height, maxSize.height);

            resizeRect.origin = (CGPoint){0.0f, 0.0f};
            UIGraphicsBeginImageContext(resizeRect.size);
            [housingImage drawInRect:resizeRect];
            UIImage *resizedImage = UIGraphicsGetImageFromCurrentImageContext();
            UIGraphicsEndImageContext();

            annotationView.image = resizedImage;
            annotationView.opaque = NO;

            UIButton* rightButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
            NSInteger annotationValue = [self.mapAnnotations indexOfObject:annotation];
            rightButton.tag = annotationValue;
            [rightButton addTarget:self action:@selector(showDetails:) forControlEvents:UIControlEventTouchUpInside];
            annotationView.rightCalloutAccessoryView = rightButton;

            return annotationView;
        }
        else
        {
            pinView.annotation = annotation;
        }
        return pinView;
    }

    else if([[annotation subtitle] isEqualToString:@"Other"])
    {
        // try to dequeue an existing pin view first
        static NSString* annotationIdentifier = @"annotationIdentifier";
        MKPinAnnotationView* pinView = (MKPinAnnotationView *)[theMapView dequeueReusableAnnotationViewWithIdentifier:annotationIdentifier];

        if (!pinView)
        {
            MKAnnotationView *annotationView = [[[MKAnnotationView alloc] initWithAnnotation:annotation
                                                                             reuseIdentifier:annotationIdentifier] autorelease];
            annotationView.canShowCallout = YES;

            UIImage *otherImage = [UIImage imageNamed:@"other.png"];

            CGRect resizeRect;

            resizeRect.size = otherImage.size;
            CGSize maxSize = CGRectInset(self.view.bounds,
                                         [mapViewController annotationPadding],
                                         [mapViewController annotationPadding]).size;
            maxSize.height -= self.navigationController.navigationBar.frame.size.height + [mapViewController calloutHeight];
            if (resizeRect.size.width > maxSize.width)
                resizeRect.size = CGSizeMake(maxSize.width, resizeRect.size.height / resizeRect.size.width * maxSize.width);
            if (resizeRect.size.height > maxSize.height)
                resizeRect.size = CGSizeMake(resizeRect.size.width / resizeRect.size.height * maxSize.height, maxSize.height);

            resizeRect.origin = (CGPoint){0.0f, 0.0f};
            UIGraphicsBeginImageContext(resizeRect.size);
            [otherImage drawInRect:resizeRect];
            UIImage *resizedImage = UIGraphicsGetImageFromCurrentImageContext();
            UIGraphicsEndImageContext();

            annotationView.image = resizedImage;
            annotationView.opaque = NO;

            UIButton* rightButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
            NSInteger annotationValue = [self.mapAnnotations indexOfObject:annotation];
            rightButton.tag = annotationValue;
            [rightButton addTarget:self action:@selector(showDetails:) forControlEvents:UIControlEventTouchUpInside];
            annotationView.rightCalloutAccessoryView = rightButton;

            return annotationView;
        }
        else
        {
            pinView.annotation = annotation;
        }
        return pinView;
    }

    else if([[annotation subtitle] isEqualToString:@"Fields"])
    {
        // try to dequeue an existing pin view first
        static NSString* annotationIdentifier = @"annotationIdentifier";
        MKPinAnnotationView* pinView = (MKPinAnnotationView *)[theMapView dequeueReusableAnnotationViewWithIdentifier:annotationIdentifier];

        if (!pinView)
        {
            MKAnnotationView *annotationView = [[[MKAnnotationView alloc] initWithAnnotation:annotation
                                                                             reuseIdentifier:annotationIdentifier] autorelease];
            annotationView.canShowCallout = YES;

            UIImage *athleticsImage = [UIImage imageNamed:@"athletics.png"];

            CGRect resizeRect;

            resizeRect.size = athleticsImage.size;
            CGSize maxSize = CGRectInset(self.view.bounds,
                                         [mapViewController annotationPadding],
                                         [mapViewController annotationPadding]).size;
            maxSize.height -= self.navigationController.navigationBar.frame.size.height + [mapViewController calloutHeight];
            if (resizeRect.size.width > maxSize.width)
                resizeRect.size = CGSizeMake(maxSize.width, resizeRect.size.height / resizeRect.size.width * maxSize.width);
            if (resizeRect.size.height > maxSize.height)
                resizeRect.size = CGSizeMake(resizeRect.size.width / resizeRect.size.height * maxSize.height, maxSize.height);

            resizeRect.origin = (CGPoint){0.0f, 0.0f};
            UIGraphicsBeginImageContext(resizeRect.size);
            [athleticsImage drawInRect:resizeRect];
            UIImage *resizedImage = UIGraphicsGetImageFromCurrentImageContext();
            UIGraphicsEndImageContext();

            annotationView.image = resizedImage;
            annotationView.opaque = NO;

            UIButton* rightButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
            NSInteger annotationValue = [self.mapAnnotations indexOfObject:annotation];
            rightButton.tag = annotationValue;
            [rightButton addTarget:self action:@selector(showDetails:) forControlEvents:UIControlEventTouchUpInside];
            annotationView.rightCalloutAccessoryView = rightButton;

            return annotationView;
        }
        else
        {
            pinView.annotation = annotation;
        }
        return pinView;
    }

    else if([[annotation subtitle] isEqualToString:@"Landmarks"])
    {
        // try to dequeue an existing pin view first
        static NSString* annotationIdentifier = @"annotationIdentifier";
        MKPinAnnotationView* pinView = (MKPinAnnotationView *)[theMapView dequeueReusableAnnotationViewWithIdentifier:annotationIdentifier];

        if (!pinView)
        {
            MKAnnotationView *annotationView = [[[MKAnnotationView alloc] initWithAnnotation:annotation
                                                                             reuseIdentifier:annotationIdentifier] autorelease];
            annotationView.canShowCallout = YES;

            UIImage *landmarkImage = [UIImage imageNamed:@"landmark.png"];

            CGRect resizeRect;

            resizeRect.size = landmarkImage.size;
            CGSize maxSize = CGRectInset(self.view.bounds,
                                         [mapViewController annotationPadding],
                                         [mapViewController annotationPadding]).size;
            maxSize.height -= self.navigationController.navigationBar.frame.size.height + [mapViewController calloutHeight];
            if (resizeRect.size.width > maxSize.width)
                resizeRect.size = CGSizeMake(maxSize.width, resizeRect.size.height / resizeRect.size.width * maxSize.width);
            if (resizeRect.size.height > maxSize.height)
                resizeRect.size = CGSizeMake(resizeRect.size.width / resizeRect.size.height * maxSize.height, maxSize.height);

            resizeRect.origin = (CGPoint){0.0f, 0.0f};
            UIGraphicsBeginImageContext(resizeRect.size);
            [landmarkImage drawInRect:resizeRect];
            UIImage *resizedImage = UIGraphicsGetImageFromCurrentImageContext();
            UIGraphicsEndImageContext();

            annotationView.image = resizedImage;
            annotationView.opaque = NO;

            UIButton* rightButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
            NSInteger annotationValue = [self.mapAnnotations indexOfObject:annotation];
            rightButton.tag = annotationValue;
            [rightButton addTarget:self action:@selector(showDetails:) forControlEvents:UIControlEventTouchUpInside];
            annotationView.rightCalloutAccessoryView = rightButton;

            return annotationView;
        }
        else
        {
            pinView.annotation = annotation;
        }
        return pinView;
    }

    return nil;
}

#pragma mark <mapParser> Implementation

- (void)parser:(NSXMLParser *)parser didFailWithError:(NSError *)parseError {

}

- (void)parserDidEndParsingData:(mapParser *)parser
{
    [self addAnnotation];

    tabView.mapAnnotations2 = mapAnnotations;

    self.mParser = nil;
    [mParser release];
}

- (void)parser:(mapParser *)parser didParseItem:(NSArray *)parsedItem
{
    NSLog(@"Did Parse Map Item");

    [self.mapAnnotations addObjectsFromArray:parsedItem];
}

- (void)reverseGeocoder:(MKReverseGeocoder *)geocoder didFailWithError:(NSError *)error {}
- (void)reverseGeocoder:(MKReverseGeocoder *)geocoder didFindPlacemark:(MKPlacemark *)placemark {}

@end
有帮助吗?

解决方案

项目文件中很可能缺少这三个类。检查XCode项目中的Classes组以查看是否存在这三个文件。如果没有,则右键单击"类"组,然后单击"添加">"现有文件"以添加它们。

如果文件被添加到项目中,则确保实现(。m)这些缺失类的文件被添加到已编译的源中。若要检查,请展开组 Targets > your application target > Compile Sources, ,并查看文件是否存在。如果没有,请右键单击"编译源",然后转到 Add > Existing Files 来添加它们。另一种可能更快的方法是选择。每个缺失类的m个文件,并查看最右边的公牛眼复选框是否被选中。如果没有,那么检查它,它会自动添加到编译源。

其他提示

“_ objc_class _ $ _ maplistviewcontroller”,引用来自: objc-class-ref-to-maplistviewcontroller在mapViewController.o

“_ objc_class _ $ _ mapparser”,引用来自: MapViewController中的objc-class-ref-to-mapparser.o

“_ objc_class _ $ _ maptabviewcontroller”,引用来自: MapViewController中的Objc-class-ref-to-maptabviewcontroller.o

ld:符号未找到collect2:ld返回1退出状态

确保所有(maplistviewcontroller,mapparser,maptabviewcontroller)都有@Interface&@implementation

解决我的问题。我碰巧错过了外观@implementation缺少

我正在具有相同的问题,我通过将框架添加到Xcode 中来解决

添加CoreGraphics Libraray时。您需要选择project_name-> targets / select projects名称(不选择项目测试名称,它是错误的,您面临错误) - > buildsetting->和添加coreLocation.framework

I was having this problem when I was trying to have pod 'FirebaseRemoteConfig inside app extensions. I added $(inherited) instead of -ObjC to Other Linker Flags in the Build Settings of the Extension target.

enter image description here

I hope it helps anyone out there. I have lost 1 hour finding this solution.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top