Pergunta

Estou trabalhando neste aplicativo para iPhone há algum tempo e o finalizei completamente e funcionando.O projeto que eu estava expandindo foi baixado de um repositório online do Subversion ao qual meu professor também me deu acesso.Acidentalmente não baixei a cópia "root" ou algo parecido, então não consegui enviar nenhuma alteração no repositório.Com a ajuda dos meus instrutores, baixei a cópia raiz hoje e adicionei todos os meus arquivos de classe a ela para poder confirmar as alterações.No entanto, agora estou recebendo três erros estranhos que nunca vi antes:

Símbolos indefinidos:

"_Objc_class _ $ _ MapListViewController", mencionado em:Objc-class-ref-to-maplistViewController em mapViewController.o

"_Objc_class _ $ _ MAPPSER", referenciado de:objc-class-ref-to-mapParser em mapViewController.o

"_Objc_class _ $ _ MaptabViewController", mencionado em:Objc-class-ref-to-maptabViewController em mapViewController.o

ld:símbolo(s) não encontrado(s) collect2:LD retornou 1 status de saída

Essa é a mensagem de erro exata que estou recebendo.Não alterei nenhum código da versão que estava funcionando completamente esta manhã.Algum conselho?O arquivo mapViewController parece ser o que está causando o problema, então aqui está isso também:

#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
Foi útil?

Solução

Muito provavelmente essas três classes estão faltando no arquivo do seu projeto.Verifique o grupo Classes em seu projeto XCode para ver se esses três arquivos estão presentes.Caso contrário, clique com o botão direito no grupo Classes e clique em Adicionar > Arquivos Existentes para adicioná-los.

Se os arquivos forem adicionados ao projeto, certifique-se de que os arquivos de implementação (.m) dessas classes ausentes sejam adicionados às fontes compiladas.Para verificar isso, expanda o grupo Targets > your application target > Compile Sources, e veja se os arquivos estão presentes.Caso contrário, clique com o botão direito em "Compile Sources" e vá para Add > Existing Files para adicioná-los.Uma maneira alternativa e talvez mais rápida de fazer o mesmo é selecionar os arquivos .m para cada uma das classes ausentes e ver se a caixa de seleção na extrema direita está marcada.Caso contrário, verifique-o e ele será adicionado automaticamente às fontes compiladas.

Outras dicas

"_OBJC_CLASS_$_mapListViewController", referenciado em:objc-class-ref-to-mapListViewController em mapViewController.o

"_OBJC_CLASS_$_mapParser", referenciado em:objc-class-ref-to-mapParser em mapViewController.o

"_OBJC_CLASS_$_mapTabViewController", referenciado em:objc-class-ref-to-mapTabViewController em mapViewController.o

ld:símbolo(s) não encontrado(s) collect2:ld retornou 1 status de saída

Certifique-se de que todos (mapListViewController,mapParser,mapTabViewController) tenham @interface e @implementation

isso resolve meu problema.acontece que sinto falta, veja @implementation estava faltando

Eu estava tendo o mesmo problema que resolvi adicionando o Framework ao xCode

quando você adiciona CoreGraphics libraray.você precisa selecionar project_name->targets/selecionar nome do projeto (não selecionar o nome de teste do projeto, é um erro que você enfrenta)->buildsetting->e adicionar CoreLocation.framework

Eu estava tendo esse problema quando estava tentando ter pod 'FirebaseRemoteConfig dentro de extensões de aplicativos.Eu adicionei $(inherited) em vez de -ObjC para Outros sinalizadores de vinculador nas configurações de compilação do destino da extensão.

enter image description here

Espero que ajude alguém aí.Perdi 1 hora encontrando esta solução.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top