2011-02-11 2 views
8

Я уже некоторое время работаю над этим приложением для iPhone, и у меня он был полностью закончен и работает. Проект, который я расширил, был загружен из репозитория subversion в Интернете, который мой профессор дал мне доступ. Я случайно не загрузил «корневую» копию или что-то в этом роде, поэтому я не смог зафиксировать какие-либо изменения в репозитории. С помощью моих инструкторов я загрузил корневую копию сегодня и добавил все мои файлы классов, чтобы я мог зафиксировать изменения. Тем не менее, сейчас я получаю 3 странные ошибки, которые я никогда не видел раньше:Objective-C Class Reference: Символы не найдены error

Неопределенные символы:

"_OBJC_CLASS _ $ _ mapListViewController", ссылки от: ObjC-класса реф-к-mapListViewController в mapViewController.o

"_OBJC_CLASS _ $ _ mapParser", ссылки из: ObjC-класса исх к mapParser в mapViewController.o

"_OBJC_CLASS _ $ _ mapTabViewController", ссылки из: ObjC-класса исх к mapTabViewController в mapViewController.o

LD: Символ (ы) не найдено 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 
+0

проверить мой ответ Я решил эту проблему [здесь] (http://stackoverflow.com/questions/2931457/iphone-sdk-linking-errors-with-static-library/ 12276904 # 12276904) – swiftBoy

ответ

29

Скорее всего эти три класса отсутствуют из файла проекта. Проверьте группу классов в проекте XCode, чтобы узнать, присутствуют ли эти три файла. Если нет, щелкните правой кнопкой мыши группу «Классы» и нажмите «Добавить»> «Существующие файлы», чтобы добавить их.

Если файлы добавлены в проект, убедитесь, что файлы реализации (.m) для этих отсутствующих классов добавлены в скомпилированные источники. Чтобы проверить это, разверните группу Targets > your application target > Compile Sources и посмотрите, имеются ли файлы. Если нет, щелкните правой кнопкой мыши «Скомпилировать источники» и перейдите в Add > Existing Files, чтобы добавить их. Альтернативный и, возможно, более быстрый способ сделать то же самое - выбрать файлы .m для каждого из отсутствующих классов и посмотреть, установлен ли флажок «бычий глаз» справа. Если нет, проверьте его, и он автоматически добавится в скомпилированные источники.

+2

, хотя это было не совсем то, что было не так, вы привели меня в правильном направлении = D. У меня уже были добавлены файлы классов, но в списке классов есть целевая строка флажков, а флажки для этих классов не отмечены. Я даже не знал, что существует до сих пор lol ... спасибо за помощь, хотя! – ReCon11

+0

совершенный. рад, что вы готовы начать кодирование :). для полноты и других пользователей, у которых может быть такая же проблема, я обновлю этот ответ. – Anurag

1

У меня был один и тот же вопрос, который я решил, добавив рамки в Xcode

+0

Я сделал полную противоположность, и это сработало для меня. Не знаете, как Xcode подходит к этим ошибкам ... :) – penatheboss

0

при добавлении CoreGraphics libraray.you необходимо выбрать project_name-> Цели/выберите имя проекта (не выбрать имя тестового проекта, сво ошибки вы сталкиваетесь) -> buildsetting-> и добавить CoreLocation.framework

0

"_OBJC_CLASS _ $ _ mapListViewController", ссылки из: ObjC-класса исх к mapListViewController в mapViewController.o

«_OBJC_CLASS_ $ _mapParser ", рефери ced from: objc-class-ref-to-mapParser в mapViewController.о

"_OBJC_CLASS _ $ _ mapTabViewController", ссылки из: ObjC-класса исх к mapTabViewController в mapViewController.o

л.д.: символ (ы) не найдено collect2: л.д. возвращается 1 Статус выхода

Убедитесь, что все (mapListViewController, mapParser, mapTabViewController), имеют как @interface & @implementation

это решить мою проблему. я случайно пропустил вид @implementation отсутствовал

Смежные вопросы