2013-03-23 57 views
0

CoreLocation不會因爲該行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行不會正確顏色的語法。此代碼可以在一個項目中運行,但不是另一個項目...... ??

+4

是'LocationAnnotation.m' YourTarget下上市公司 - >構建階段 - >編譯源代碼?或者在'LocationAnnotation.m'文件檢查器中的某個目標中勾選複選框? – Sebastian 2013-03-23 02:15:42

回答

1

您的代碼編譯時,它是報告問題的鏈接器。鏈接器找不到您的LocationAnnotation類,因爲它可能未編譯。選擇Xcode和在文件檢查器(在右邊盤)的LocationAnnotation.m,並確保該文件是你的目標的一員:

select target membership

相關問題