由于此行
,CoreLocation不会编译LocationAnnotation *annotation = [[LocationAnnotation alloc] initWithTitle:@"Point to home?" andCoordinate:newLocation.coordinate andSubtitle:nil];
我已经尝试过所有内容,现在又厌倦了重新链接coreLoction
如果我注释掉该行CoreLocation编译正常。
我在构建阶段包含了corelocation和mapkit,我没有框架搜索路径
Undefined symbols for architecture i386:
"_OBJC_CLASS_$_LocationAnnotation", referenced from:
objc-class-ref in JobMapVC.o
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
我在另一个项目中使用了这个代码,编译得很好,我缺少什么?
主控制器
JobMapVC.h
#import <UIKit/UIKit.h>
#import <MapKit/MapKit.h>
#import <CoreLocation/CoreLocation.h>
#import "LocationAnnotation.h"
@interface JobMapVC : UIViewController <MKMapViewDelegate, CLLocationManagerDelegate>
{
NSString *address;
@private
CLLocationManager *locationManager;
}
@property (nonatomic, strong) NSString *address;
@property (nonatomic, retain) CLLocationManager *locationManager;
@property (nonatomic, assign, readwrite) double homeLatitude;
@property (nonatomic, assign, readwrite) double homeLongitude;
@property (weak, nonatomic) IBOutlet MKMapView *mapView;
- (IBAction)dismissMap:(id)sender;
@end
JobMapVC.m
#import "JobMapVC.h"
#import "LocationAnnotation.h"
@interface JobMapVC ()
@end
@implementation JobMapVC
{
}
@synthesize address = _address;
@synthesize locationManager = _locationManager;
- (void)viewDidLoad
{
[super viewDidLoad];
[self searchCoordinatesForAddress:_address];
}
- (void) searchCoordinatesForAddress:(NSString *)inAddress{
NSString *cleanAddress = [[inAddress componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]] componentsJoinedByString:@" "];
NSMutableString *urlString = [NSMutableString stringWithFormat:@"http://maps.googleapis.com/maps/api/geocode/json?sensor=true&address=%@",cleanAddress];
[urlString setString:[urlString stringByReplacingOccurrencesOfString:@" " withString:@"+"]];
NSURL *url = [NSURL URLWithString:urlString];
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url];
NSError* error;
NSURLResponse *response;
NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
NSDictionary* georesults = [NSJSONSerialization
JSONObjectWithData:returnData
options:NSJSONReadingMutableContainers | NSJSONReadingAllowFragments
error:&error];
if ( [[georesults objectForKey:@"status"] isEqualToString:@"OK"] )
{
double latitude = [[[[[[georesults objectForKey:@"results"]objectAtIndex:0] objectForKey:@"geometry"]objectForKey:@"location"]objectForKey:@"lat"] doubleValue];
double longitude = [[[[[[georesults objectForKey:@"results"]objectAtIndex:0] objectForKey:@"geometry"]objectForKey:@"location"]objectForKey:@"lng"] doubleValue];
NSLog(@"lat:%f", latitude );
[self zoomMapAndCenterAtLatitude:latitude andLongitude:longitude];
}
}
- (void) zoomMapAndCenterAtLatitude:(double)latitude andLongitude:(double)longitude
{
MKCoordinateRegion region;
region.center.latitude = latitude;
region.center.longitude = longitude;
//Set Zoom level using Span
MKCoordinateSpan span;
span.latitudeDelta = .005;
span.longitudeDelta = .005;
region.span = span;
//Move the map and zoom
[_mapView setRegion:region animated:YES];
// Map pin
CLLocation *newLocation = [[CLLocation alloc] initWithLatitude:latitude longitude:longitude];
// THIS LINE STOP coreLocation from compiling !!!
LocationAnnotation *annotation = [[LocationAnnotation alloc] initWithTitle:@"Point to home?" andCoordinate:newLocation.coordinate andSubtitle:nil];
[self.mapView addAnnotation:annotation];
[self.mapView selectAnnotation:annotation animated:YES];
}
- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error {
NSLog(@"locationManager:%@ didFailWithError:%@", manager, error);
if (error.code == kCLErrorDenied)
{
UIAlertView *alert = [[UIAlertView alloc]
initWithTitle:@"Error!"
message:@"This can not work without location services enabled"
delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
}
}
- (IBAction)dismissMap:(id)sender
{
[self dismissModalViewControllerAnimated:YES];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
}
@end
我使用的LocationAnnotation文件与另一个没有任何问题的项目完全相同
LocationAnnotation.h
#import <Foundation/Foundation.h>
#import <MapKit/MapKit.h>
@interface LocationAnnotation : NSObject <MKAnnotation> {
}
@property (strong) NSString *title;
@property (strong) NSString *subtitle;
- (id)initWithTitle:(NSString *)ttl andCoordinate:(CLLocationCoordinate2D)c2d andSubtitle:(NSString *)sbttl;
@end
LocationAnnotation.m
#import "LocationAnnotation.h"
@implementation LocationAnnotation
@synthesize title, subtitle, coordinate;
- (id)initWithTitle:(NSString *)ttl andCoordinate:(CLLocationCoordinate2D)c2d andSubtitle:(NSString *)sbttl {
if ((self = [super init])) {
title = ttl;
subtitle = sbttl;
coordinate = c2d;
}
return self;
}
@end
奇怪的是 - (id)initWithTitle行不会正确地为语法着色。这段代码适用于一个项目而不是另一个项目...... ?? !!
答案 0 :(得分:1)
您的代码编译,它是报告问题的链接器。链接器找不到您的LocationAnnotation
类,因为它可能未编译。选择Xcode中的LocationAnnotation.m
和文件检查器(位于右侧托盘中),并确保该文件是目标成员: