0

plistのデータを使用して、マップ上に多数のピンをロードしています。データを取得する方法は次のとおりです。

for (int i=0; i<self.dataArray.count; i++){

    NSDictionary *dataDictionary = [self.dataArray objectAtIndex:i];
    NSArray *array = [dataDictionary objectForKey:@"Locations"];

    for (int i=0; i<array.count; i++){

        NSMutableDictionary *dictionary = [array objectAtIndex:i];

        double latitude = [[dictionary objectForKey:@"Latitude"] doubleValue];
        double longitude = [[dictionary objectForKey:@"Longitude"] doubleValue];

        CLLocationCoordinate2D coord = {.latitude =
            latitude, .longitude =  longitude};
        MKCoordinateRegion region = {coord};

        MapAnnotation *annotation = [[MapAnnotation alloc] init];
        annotation.title = [dictionary objectForKey:@"Name"];

        NSString *cityState = [dictionary objectForKey:@"City"];
        cityState = [cityState stringByAppendingString:@", "];
        NSString *state = [dictionary objectForKey:@"State"];
        cityState = [cityState stringByAppendingString:state];
        annotation.subtitle = cityState;
        annotation.coordinate = region.center;
        [mapView addAnnotation:annotation];
    }
}

これで、すべての注釈に対して、detailDisclosureButtonを追加しました。その特定の場所の詳細をplistから表示したいと思います。問題は、indexPath.sectionとindexPath.rowが必要なことです。

ピンのindexPathを取得するにはどうすればよいですか?注釈タイトルが入力されている辞書のindexPathを見つける方法はありますか?

4

1 に答える 1

3

「セクション」と「行」を追跡する代わりに、dictionaryそれ自体への参照を注釈オブジェクトに格納することをお勧めします。

クラスに、MapAnnotationソースディクショナリへの参照を保持するプロパティを追加します。

@property (nonatomic, retain) NSMutableDictionary *sourceDictionary;

title(既存のループで)注釈を作成するときは、このプロパティを、などと一緒に設定します。

annotation.sourceDictionary = dictionary;
annotation.title = [dictionary objectForKey:@"Name"];

次に、詳細ボタンハンドラーメソッド(calloutAccessoryControlTappedデリゲートメソッドを使用していると仮定)で、アノテーションオブジェクトをクラスにキャストすると、アノテーションの元のディクショナリにアクセスできるようになります。

MapAnnotation *mapAnn = (MapAnnotation *)view.annotation;
NSLog(@"mapAnn.sourceDictionary = %@", mapAnn.sourceDictionary);
于 2012-09-24T03:26:14.970 に答える