Frage

Ich arbeite jetzt schon seit einiger Zeit an dieser iPhone-App und habe sie vollständig fertiggestellt und funktioniert.Das Projekt, das ich erweiterte, wurde von einem Subversion-Repository im Internet heruntergeladen, auf das mir mein Professor ebenfalls Zugriff gewährt hatte.Ich habe aus Versehen die „Root“-Kopie oder ähnliches nicht heruntergeladen und konnte daher keine Änderungen am Repository vornehmen.Mit der Hilfe meiner Lehrer habe ich heute die Root-Kopie heruntergeladen und alle meine Kursdateien hinzugefügt, damit ich die Änderungen übernehmen konnte.Allerdings erhalte ich jetzt drei seltsame Fehler, die ich noch nie zuvor gesehen habe:

Undefinierte Symbole:

"_Objc_class _ $ _ MAPLISTVIEWCONTROLLER", in Bezug auf:OBJC-CLASS-REF-TO-MAPLISTVIEWCONTROLLER IN MAPVIEWCONTROLLER.O

"_Objc_class _ $ _ mapparser", verwiesen aus:objc-class-ref-to-mapParser in mapViewController.o

"_Objc_class _ $ _ MaptabviewController", verwiesen auf:OBJC-CLASS-REF-TO-MAPTABVIEWCONTROLLER IN MAPVIEWCONTROLLER.O

ld:Symbol(e) nicht gefunden sammeln2:LD gab 1 Exit -Status zurück

Das ist genau die Fehlermeldung, die ich bekomme.Ich habe keinen Code gegenüber der Version geändert, die heute Morgen vollständig funktionierte.Irgendein Rat?Die Datei „mapViewController“ scheint die Ursache des Problems zu sein, also auch hier:

#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
War es hilfreich?

Lösung

Höchstwahrscheinlich fehlen diese drei Klassen in Ihrer Projektdatei.Überprüfen Sie die Gruppe „Klassen“ in Ihrem XCode-Projekt, um festzustellen, ob diese drei Dateien vorhanden sind.Wenn nicht, klicken Sie mit der rechten Maustaste auf die Gruppe „Klassen“ und klicken Sie auf „Hinzufügen“ > „Vorhandene Dateien“, um sie hinzuzufügen.

Wenn die Dateien dem Projekt hinzugefügt werden, stellen Sie sicher, dass die Implementierungsdateien (.m) für diese fehlenden Klassen zu den kompilierten Quellen hinzugefügt werden.Um dies zu überprüfen, erweitern Sie die Gruppe Targets > your application target > Compile Sources, und prüfen Sie, ob die Dateien vorhanden sind.Wenn nicht, klicken Sie mit der rechten Maustaste auf „Quellen kompilieren“ und gehen Sie zu Add > Existing Files um sie hinzuzufügen.Eine alternative und möglicherweise schnellere Möglichkeit, dasselbe zu tun, besteht darin, die .m-Dateien für jede der fehlenden Klassen auszuwählen und zu prüfen, ob das Kontrollkästchen „Volltreffer“ ganz rechts aktiviert ist.Wenn nicht, überprüfen Sie es und es wird automatisch zu den kompilierten Quellen hinzugefügt.

Andere Tipps

"_ objc_classe _ $ _ maplistviewController", referenziert von: objc-class-ref-to-maplistviewController in MapViewController.O

"_ objc_class _ $ _ mapparser", referenziert von: objc-class-ref-to-mapparser in mapviewcontroller.o

"_ objc_class _ $ _ maptabViewController", referenziert von: objc-class-ref-to-maptabViewController in MapViewController.O

ld: symbol (s) nicht gefunden collect2: ld zurückgegeben 1 EXIT-Status

Stellen Sie sicher, dass alle (MaplistViewController, Maplarser, MapTabViewController) beide @Interface & @implementation haben

Dies löst mein Problem.Ich fehlte passieren, dass @implementation fehlte

Ich hatte das gleiche Problem, das ich durch Hinzufügen des Rahmens in Xcode aufgelöst habe

when you add CoreGraphics libraray.you need to select project_name->targets/select project name (not select project test name,its an error you face)->buildsetting->and add 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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top