我正在研究一個簡單的GPS類應用程序。我創建了一個擴展MKAnnotation的自定義對象,這也很好。我可以放置它等,但如果我把這段代碼[mpm setCoordinate:loc];
放在我的代碼中,應用程序打開並凍結,同時顯示基本的灰色網格(不顯示任何下載的地圖和非我的按鈕都可以工作)MKMapView Annotation setCoordinate崩潰應用程序
這裏是我的頭:
@interface FirstViewController : UIViewController <MKMapViewDelegate>
{
IBOutlet MKMapView *mapView;
MyPlaceMark *mpm;
}
-(void)locationUpdate:(CLLocation *)location;
-(void)locationError:(NSError *)error;
@end
這裏是一段代碼,我嘗試更新的東西:
-(void)locationUpdate:(CLLocation *)location
{
CLLocationCoordinate2D loc = [location coordinate];
[mpm setCoordinate:loc]; // This line messes it up.
[mapView setCenterCoordinate:loc];
if([mapView showsUserLocation] == NO)
[mapView setShowsUserLocation:YES]; // This does not show my position either?
}
如果我評論說,線路輸出,應用程序工作正常。我需要更新註釋,因爲它是我用來顯示用戶當前位置的標記。 PS:沒有這條線,它確實以我的觀點爲中心 - 所以location
是一個有效/設置變量。
我viewDidLoad
看起來像這樣:
- (void)viewDidLoad {
mapView = [[MKMapView alloc] initWithFrame:self.view.bounds];
//mapView.showsUserLocation = YES;
[mapView setShowsUserLocation:YES];
mapView.mapType = MKMapTypeStandard;
mapView.delegate = self;
CLLocationCoordinate2D location;
MKCoordinateRegion region;
location.latitude = -33.8;
location.longitude = 18.6;
MKCoordinateSpan span;
span.latitudeDelta = 0.01;
span.longitudeDelta = 0.01;
region.span = span;
region.center = location;
[mapView setRegion:region animated:TRUE];
[mapView regionThatFits:region];
mpm = [[MyPlaceMark alloc] initWithCoordinate:location]; // Creating mpm
[mapView addAnnotation:mpm]; // Adding mpm
[self.view addSubview:mapView];
[super viewDidLoad];
}
我應該重新添加mpm
後,我改變了它的位置?或者它會跳轉到地圖上的新位置?
因此,要回顧一下問題:如何更新我的mapview上的自定義MKAnnotation的位置?
謝謝你的時間!
編輯:我認爲這次崩潰的主要原因是我沒有在我的自定義MKAnnotation中創建setCoordinate
方法/函數。我會如何覆蓋,但保持原來的相同?
在登錄控制檯的錯誤:
2011-06-09 14:42:40.377 AeroNav[3706:707] -[MyPlaceMark setCoordinate:]: unrecognized selector sent to instance 0x19e0e0
2011-06-09 14:42:40.493 AeroNav[3706:707] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[MyPlaceMark setCoordinate:]: unrecognized selector sent to instance 0x19e0e0'
...
terminate called after throwing an instance of 'NSException'
更新:我認爲你必須刪除舊的註釋並添加新的註釋。崩潰什麼是登錄控制檯? – Iducool 2011-06-09 12:24:37
在結尾處添加。 – LouwHopley 2011-06-09 12:47:38