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行不會正確顏色的語法。此代碼可以在一個項目中運行,但不是另一個項目...... ??
是'LocationAnnotation.m' YourTarget下上市公司 - >構建階段 - >編譯源代碼?或者在'LocationAnnotation.m'文件檢查器中的某個目標中勾選複選框? – Sebastian 2013-03-23 02:15:42