Domanda

Sto lavorando su questa app per iPhone ormai da un po' e l'avevo completamente finita e funzionante.Il progetto che stavo sviluppando è stato scaricato da un repository online di sovversione a cui anche il mio professore mi aveva dato accesso.Per sbaglio non ho scaricato la copia "root" o qualcosa del genere, quindi non ho potuto apportare alcuna modifica al repository.Con l'aiuto dei miei istruttori, oggi ho scaricato la copia root e vi ho aggiunto tutti i file della mia classe in modo da poter apportare le modifiche.Tuttavia, ora ricevo 3 strani errori che non avevo mai visto prima:

Simboli non definiti:

"_Objc_class _ $ _ maplistviewcontroller", riferito da:OBJC-Class-Ref-to-MapListViewController in MapViewController.O

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

"_Objc_class _ $ _ maptabviewcontroller", riferito da:OBJC-Classe-Ref-to-MaptabviewController in MapViewController.O

ld:simbolo/i non trovato Collect2:LD ha restituito 1 stato di uscita

Questo è l'esatto messaggio di errore che ricevo.Non ho modificato alcun codice rispetto alla versione che funzionava completamente stamattina.Qualche consiglio?Il file mapViewController sembra essere la causa del problema, quindi ecco anche quello:

#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
È stato utile?

Soluzione

Molto probabilmente queste tre classi mancano nel file di progetto.Controlla il gruppo Classi nel tuo progetto XCode per vedere se questi tre file sono presenti.In caso contrario, fare clic con il pulsante destro del mouse sul gruppo Classi e fare clic su Aggiungi > File esistenti per aggiungerli.

Se i file vengono aggiunti al progetto, assicurati che i file di implementazione (.m) per queste classi mancanti vengano aggiunti ai sorgenti compilati.Per verificarlo, espandere il gruppo Targets > your application target > Compile Sources, e controlla se i file sono presenti.In caso contrario, fai clic con il pulsante destro del mouse su "Compile Sources" e vai a Add > Existing Files per aggiungerli.Un modo alternativo e forse più rapido per fare lo stesso è selezionare i file .m per ciascuna delle classi mancanti e vedere se la casella di controllo del centro all'estrema destra è selezionata.In caso contrario, selezionalo e verrà automaticamente aggiunto alle fonti compilate.

Altri suggerimenti

"_OBJC_CLASS_$_mapListViewController", riferimento da:objc-class-ref-to-mapListViewController in mapViewController.o

"_OBJC_CLASS_$_mapParser", riferimento da:objc-class-ref-to-mapParser in mapViewController.o

"_OBJC_CLASS_$_mapTabViewController", riferimento da:objc-class-ref-to-mapTabViewController in mapViewController.o

ld:simbolo/i non trovato Collect2:ld ha restituito 1 stato di uscita

Assicurati che tutti (mapListViewController, mapParser, mapTabViewController) abbiano sia @interface che @implementation

questo risolve il mio problema.mi capita di perdere l'aspetto @mancava @implementation

Stavo riscontrando lo stesso problema che ho risolto aggiungendo il Framework in xCode

quando aggiungi CoreGraphics libraray. devi selezionare project_name->targets/selezionare il nome del progetto (non selezionare il nome del test del progetto, è un errore che devi affrontare)->buildsetting->e aggiungere CoreLocation.framework

Stavo riscontrando questo problema quando stavo cercando di avere pod 'FirebaseRemoteConfig all'interno delle estensioni dell'app.Ho aggiunto $(inherited) invece di -ObjC A Altri flag del linker nelle Impostazioni di creazione della destinazione dell'estensione.

enter image description here

Spero che aiuti qualcuno là fuori.Ho perso 1 ora per trovare questa soluzione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top