2011-03-16 41 views
0

我想從一個單獨的類加載註釋一旦數據已被解析。數據解析正確,我通過NSLog。我將數據發送給負責加載MKMapView的類。這個類接收正確的數據。iOS MapKit didAddAnnotationViews方法不叫

下面是對於解析我的數據的類(ParseData.m)的代碼:

AnnotationsTest *loadFriend = [[AnnotationsTest alloc] init]; 
    [loadFriend loadOutAnnotations:friendFound]; 
    [loadFriend loadOutAnnotationsAgain]; 
    [loadFriend release]; 

的方法,被稱爲我的第二類(MapViewController.m):

-(void)loadOutAnnotations:(NSMutableArray *)friendData 

與下面的代碼:

CLLocationCoordinate2D workingCoordinate; 

workingCoordinate.latitude = [[friendData objectAtIndex:5] floatValue]; 
workingCoordinate.longitude = [[friendData objectAtIndex:4] floatValue]; 
MapAnnotation *appleStore1 = [[MapAnnotation alloc] initWithCoordinate:workingCoordinate]; 
[appleStore1 setTitle:@"Title"]; 
[appleStore1 setSubtitle:@"subtitle"]; 
[appleStore1 setUserData:[friendData objectAtIndex:6]]; 
[appleStore1 setAnnotationType:iCodeBlogAnnotationTypeApple]; 

[self.mapView addAnnotation:appleStore1]; 

最後,這裏是我的代碼以addAnotation響應事件(MapViewController.m):

- (void)mapView:(MKMapView *)mapViews didAddAnnotationViews:(NSArray *)views { 
id myAnnotation = [mapViews.annotations objectAtIndex:0]; 
[mapViews selectAnnotation:myAnnotation animated:YES]; 
NSLog(@"didAddAnnotationViews is called");} 

該註釋將完全加載,如果我硬代碼中的變量,不通過該方法傳遞的NSMutableArray,並且當在的MapViewController類viewDidLoad中部分中的方法調用。當我嘗試調用該方法從另一個類添加註釋時,didAddAnnotationViews方法不響應。

請指教。提前致謝!!

埃文

+0

NSMutableArray是否可能在您將它傳遞給方法之前釋放?你在哪裏建立陣列?你能否再詳細解釋一下,當你硬編碼什麼變量時,什麼工作正確?一步步? – 2011-03-16 06:48:14

+0

當我使用座標對loadOutAnnotation函數進行硬編碼並將其稱爲MapViewController.m的viewDidLoad部分時,將出現註釋。如果我嘗試從ParseData.m中調用loadOutAnnotation函數,它將不會出現。我添加了didAddAnnotationViews來希望加載註釋,但沒有運氣。 NSMutableArray只是傳遞我可以驗證的座標通過NSLog傳遞給loadOutAnnotation方法。如果有更多我能提供的信息,請告訴我。感謝您查看這個! – 2011-03-16 07:32:39

+0

我認爲很難弄清楚提供的代碼量有什麼問題。也許你可以打包代碼,並將其放在github上,或者在這裏發佈所有涉及的方法。 – 2011-03-16 07:53:59

回答

3

所以,我看着你的代碼和它的預期的行爲:一個地圖標註僅僅是一個註釋的抽象表示。您必須「手動」將其添加到地圖。然後,地圖詢問委託人它應該用來顯示註釋的VIEW。所以難怪它沒有出現,當你不把它添加到地圖:)

+0

謝謝Johannes!對不起,我對iOS編程還是比較陌生。爲了澄清,當我在AnnotationProblemViewController.m的viewDidLoad下添加註釋時,它的工作原理是 - (MapAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id )註釋告訴地圖哪個查看它應該顯示。但是當我從CallAnnotation調用loadOutAnnotation時,不調用此方法來告訴地圖要顯示哪個視圖?我該如何解決這個問題? – 2011-03-16 11:51:17

+1

我明白你的意思了。好的,這是問題:在CallAnnotation.m中,您正在創建視圖控制器的新實例。你不想那樣。你想從應用程序委託中使用視圖控制器。因此,當您創建CallAnnotation實例並在該視圖控制器上調用loadOutAnnotation時,您需要傳遞對該視圖控制器的引用。 (順便說一句,當你喜歡它時,請回答一個答案,這是StackOverflow的好習慣:)) – 2011-03-16 13:14:49

+0

美麗!謝謝謝謝!花在這樣一個簡單的錯誤上的時間。爲了從CallAnnotation正確調用方法,我使用了以下代碼:AnnotationProblemAppDelegate * appDelegate =(AnnotationProblemAppDelegate *)[[UIApplication sharedApplication] delegate]; \t [appDelegate.viewController loadOutAnnotations]; – 2011-03-16 15:01:46