Objective C で独自のナビゲーション マップの開発を開始しましたが、最近 MapKit で行き詰まりました。
XCode 4.5、iOS ターゲットを 6.0 に設定しています。Link Binary With Libraries を介してロードされる MapKit フレームワーク。
エラーは次のようになります。
dyld: lazy symbol binding failed: Symbol not found: \314CGRectIsEmpty
Referenced from: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator6.0.sdk/System/Library/Frameworks/MapKit.framework/MapKit
Expected in: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator6.0.sdk/System/Library/Frameworks/CoreGraphics.framework/CoreGraphics
dyld: Symbol not found: \314CGRectIsEmpty
Referenced from: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator6.0.sdk/System/Library/Frameworks/MapKit.framework/MapKit
Expected in: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator6.0.sdk/System/Library/Frameworks/CoreGraphics.framework/CoreGraphics
私が始めたときは問題なく動作しましたが、ツールバー項目や currentLocation ボタンなどの機能を追加したところ、このワイルド エラーが発生し始めました。まず、コードに問題があると思いました。しかし、その後、機能するプログラムがあり、機能を追加すると、このエラーがスローされ始め、元に戻してもエラーが続きます。MapViewController のコードは次のとおりです。
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
}
- (void)viewWillAppear:(BOOL)animated {
// 1
CLLocationCoordinate2D zoomLocation;
zoomLocation.latitude = 50.07499;
zoomLocation.longitude= 14.43976;
// 2
MKCoordinateRegion viewRegion = MKCoordinateRegionMakeWithDistance(zoomLocation, 10000, 10000);
// 3
MKCoordinateRegion adjustedRegion = [self.mapView regionThatFits:viewRegion];
// 4
[self.mapView setRegion:adjustedRegion animated:YES];
if (self.mapView.userLocationVisible){
self.currentLocationButton.enabled = YES;
}else{
self.currentLocationButton.enabled = NO;
timer = [NSTimer scheduledTimerWithTimeInterval:5.00 target:self selector:@selector(checkGeolocationAvailible) userInfo:nil repeats:YES];
[timer fire];
}
}
- (IBAction)checkGeolocationAvailible {
if (self.mapView.userLocationVisible){
self.currentLocationButton.enabled = YES;
[timer invalidate];
}
}
- (IBAction)showCurrentLocation {
if (self.mapView.userLocationVisible){
[self.mapView setCenterCoordinate:self.mapView.userLocation.coordinate];
}
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}