Objective-Cクラスリファレンス:シンボルが見つかりませんエラー
-
12-11-2019 - |
質問
今のところこのiPhoneアプリに取り組んできました、そして、私は完全に完成して働いていました。私が展開していたプロジェクトは、私の教授が私にアクセスしたことをオンラインで購入したSubversionリポジトリからダウンロードされました。私は誤って "root"コピーやそのようなものをダウンロードしなかったので、私はリポジトリへの変更をコミットすることができませんでした。私のインストラクターのヘルプで、私は今日ルートコピーをダウンロードし、私のすべてのクラスファイルをそれに追加して変更をコミットできるようにしました。しかし、私は今まで見たことがない3奇妙なエラーを得ました:
未定義のシンボル:
"_ objc_class _ $ _ maplistviewcontroller"、 から参照されます: objc-class-ref-to-maplistViewController. mapviewcontroller.o
「_ objc_class _ $ _ mapparser」、 から参照されます: objc-class-ref-maparserのmapviewcontroller.o
"_ objc_class _ _ _ maptabviewcontroller"、 から参照されます: objc-class-ref-to-maptabviewController. mapviewcontroller.o
LD:シンボルが見つかりませんCollect2:LD 返された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
解決
おそらくこれら3つのクラスがプロジェクトファイルから欠落しています。Xcodeプロジェクト内のクラスグループを確認して、これら3つのファイルが存在するかどうかを確認してください。そうでない場合は、クラスグループを右クリックし、追加>既存のファイルをクリックして追加します。
ファイルがプロジェクトに追加されたら、これらの欠落クラスの実装(.m)ファイルがコンパイルされたソースに追加されていることを確認してください。それを確認するには、Group Targets > your application target > Compile Sources
を展開し、ファイルが存在するかどうかを確認します。そうでない場合は、「コンパイルソース」を右クリックし、GOTO Add > Existing Files
を追加します。別の方法で、同じことをするより迅速な方法は、欠けているクラスのそれぞれの.mファイルを選択することです。そうでない場合は、それをチェックして、自動的にコンパイルされたソースに追加されます。
他のヒント
"_ objc_class _ _ _ maplistviewcontroller"、から参照しています。 objc-class-ref-to-maplistViewController in mapviewcontroller.o
"_ objc_class _ _ _ mapparser"、から参照されます。 objc-class-ref-maparserのmapviewcontroller.o
"_ objc_class _ $ _ maptabviewcontroller"、から参照しています。 objc-class-ref-to-maptabviewコントローラmapviewcontroller.o
LD:シンボルが見つかりませんCollect2:LDが返されました1終了ステータス
すべて(MaplistViewController、Maparser、MapTabViewController)の両方が@Interface&@Implementation の両方を持つようにします。
これは私の問題を解決します。私は見逃して見逃して@Implementationが欠落していました
私はxcode にフレームワークを追加して解決したのと同じ問題を持っていました
CoreGraphics Librarayを追加するとき。
アプリ拡張内部にpod 'FirebaseRemoteConfig
を持っていようとしていたとき、私はこの問題を抱えていました。拡張子ターゲットのビルド設定では、$(inherited)
の代わりに-ObjC
をその他のリンカフラグに追加しました。
href="https://i.stack.imgur.com/au9wl.png" rel="nofollownoreferrer">
誰もがそこにいるのを助けたいと思います。私はこの解決策を見つける1時間を失った。