0

シンプルなマップビューがあります。方法があります

-(void)loadAndDisplayPois{
NSLog(@"loadAndDisplayPois");
 if(mapView.annotations.count > 0)
     [mapView removeAnnotations:mapView.annotations];
self.pois = [self loadPoisFromDatabase];
NSLog(@"self.pois.count: %i", self.pois.count);
[mapView addAnnotations:self.pois];
NSLog(@"mapView.annotations.count: %i",mapView.annotations.count);}

このメソッドが呼び出され、データをダウンロードしてデータベースに保存した後、ログが原因でメソッドが呼び出されると確信しています。ダウンロードを処理するクラスは、データをデータベースに保存した後に実行されます[self.senderObj performSelector:@selector(loadAndDisplayPois)];。ここで、senderObjはMapViewControlllerです。pois配列からのカウントログは、最初にクリックした後に4を示しています。ただし、呼び出されないため、ビューに注釈viewForAnnotationはありません(配列内の1つの注釈(私の現在の位置))。[テスト]ボタンをクリックしてメソッドを再度実行すると、マップ上のすべてが表示されます。

このviewForAnnotationメソッドはviewWillAppear、[テスト]ボタンをクリックした後とクリックした後に呼び出されます。

それは2日以来私を狂わせています。もうできません...

4

2 に答える 2

0

viewForAnnotation を手動で呼び出す必要はありません。マップを表示するクラスが MKMapView のデリゲートであることを示す必要があります。

あなたの.h

 @interface yourViewController : UIViewController<MKMapViewDelegate> 

編集:

私はプロジェクトでこのコードを使用し、私のために働きました:

- (void)updateAnnotations {
    if (self.mapView != nil && self.mapView.annotations != nil) {
        NSArray *annotationsCopy = [NSArray arrayWithArray:[self.mapView.annotations filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"!(self isKindOfClass: %@)", [MKUserLocation class]]]];

        [self.mapView removeAnnotations:annotationsCopy];
    }

    for (int i = 0 ; i < [appDelegate.centrosComerciales count] ; i++) {
        CC *ccAct = (CC *)[appDelegate.centrosComerciales objectAtIndex:i];
        CMapPoint *mp = [[CMapPoint alloc] initWithCC:ccAct];
        [self.mapView addAnnotation:mp];
        [mp release];
    }
} 

mapView.annotations を削除する代わりに、ユーザーの場所の注釈を付けずに、注釈のコピーを削除しました。

viewWillAppear で updateAnnotations メソッドが呼び出されます。

コードと非常に似ていますが、mapView.annotations を直接削除する代わりに、annotationsCopy を削除します。

于 2012-08-29T22:12:27.897 に答える
0

わかりました、さらに絞り込みました。しかし、私はまだそれを理解していません。

if(mapView.annotations.count > 0)
    [mapView removeAnnotations:mapView.annotations];
self.pois = [self loadPoisFromDatabase];
[mapView addAnnotations:self.pois];

このコードをボタンで実行すると、機能します。別のクラスから呼び出された同じコードは機能しません。どうして????

違いはどこにありますか?

于 2012-08-29T22:55:51.993 に答える