在我正在處理的一個應用中,用戶被導向按下按鈕以將MKAnnotations拖放到地圖上。當引腳被添加到didAddAnnotationViews
時,它們會丟棄2或3個引腳,每個引腳都被保存到@property中,因爲我稍後需要引用它,並且我需要知道它是哪個引腳 - 引腳1,2或3 (它們被丟棄的順序)。MKAnnotationView正在失去對MKAnnotation的引用
我正在使用自定義的MKAnnotation和MKAnnotationView類爲每個註釋添加幾個NSString,我不確定這是否重要。
我創建3個屬性是這樣的:
@property (nonatomic, strong) CustomAnnotationView *ann1;
@property (nonatomic, strong) CustomAnnotationView *ann2;
@property (nonatomic, strong) CustomAnnotationView *ann3;
這裏是我的didAddAnnotationViews
:
- (void)mapView:(MKMapView *)aMapView didAddAnnotationViews:(NSArray *)views
{
for(MKAnnotationView *view in views)
{
if(![view.annotation isKindOfClass:[MKUserLocation class]])
{
CustomAnnotationView *newAnnView = (CustomAnnotationView*)view;
if(newAnnView.type == CustomType1)
{
ann1 = newAnnView;
}
else if(newAnnView.type == CustomType2)
{
ann2 = newAnnView;
}
else if(newAnnView.type == CustomType3)
{
ann3 = newAnnView;
}
}
}
}
而且,這裏是我的viewForAnnotation
方法:
- (MKAnnotationView *)mapView:(MKMapView *)pMapView viewForAnnotation:(id <MKAnnotation>)annotation
{
if([annotation class] == MKUserLocation.class)
{
return nil;
}
CustomAnnotationView *annotationView = [[CustomAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"WayPoint"];
annotationView.canShowCallout = YES;
annotationView.draggable = YES;
[annotationView setSelected:YES animated:YES];
[annotationView setRightCalloutAccessoryView:customCalloutButton];
return annotationView;
}
現在,最終,我需要保存這些註釋的座標,這裏是出錯的地方。有時候,但只有一段時間,ann1.annotation.coordinate.latitude
和ann1.annotation.coordinate.longitude
都是0.0(這種情況發生在ann1,ann2或ann3上,僅以ann1爲例)!這是爲什麼發生?我有一種感覺,它與對象引用問題有關,因爲MKAnnotationView仍然完好無損,但註釋已被清除。也許我用ann1 = newAnnView分配引用是不好的?我應該用viewForAnnotation
?
有沒有人看到我做錯了什麼?
UPDATE
我看了看我的MKAnnotation子類,我注意到,當我根據文檔定義座標財產,我是不是在我的實現文件@synthesizing它。我現在補充說,我還沒有能夠複製這個問題呢,如果這最終成爲「修復」,我仍然很困惑爲什麼我的代碼大部分時間沒有@synthesize 。也許我沒有真正解決這個問題,而且我後來爲失望而自責。
我建議你把這個改成通常的方法。存儲'註釋'以便重用,而不是視圖。在MVC範式視圖中不包含數據,它們只是顯示有關模型的內容。和MKAnnotations是你在這種情況下的模型。 – Craig
^上面的評論是很久很久以前=)爲我解決了這個問題。存儲模型,而不是視圖,杜。當我還是一個obj-c新手時,這又回來了。 – DiscDev