2011-06-09 74 views
0

我正在研究一個簡單的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' 
+0

更新:我認爲你必須刪除舊的註釋並添加新的註釋。崩潰什麼是登錄控制檯? – Iducool 2011-06-09 12:24:37

+0

在結尾處添加。 – LouwHopley 2011-06-09 12:47:38

回答

0

[mapView setShowsUserLocation:YES]不更新該地區的地圖顯示。您必須實施代表方法didUpdateUserLocation:並在那裏致電setRegion:animated:將區域移至用戶所在位置。在第一次調用之前,MKMapViewuserLocation屬性未設置。

至於MKAnnotation的事情,MKAnnotation是一個協議。它沒有默認的實現。您必須提供您已同意符合的所有方法和屬性。因此,聲明一個與MKAnnotation協議中的屬性非常相似的屬性。

+0

OMW--它現在可以工作,並且第一次顯示圍繞它的藍色圓點。我刪除了很多代碼,包括刪除註釋:/哈哈,現在運行良好。 ...這個'setShowsUserLocation'和'setRegion'在viewdidload中被調用,就像上面的代碼... anycase一樣,它現在可以在一些隨機編輯之後工作。謝謝。 – LouwHopley 2011-06-09 12:52:54