0

私の理解から、あなたが次のようなことをするとき:

[self.mapView addAnnotation:anAddress];

マップにアノテーションを追加してから、次のようにビューのデリゲートメソッドを調べます。

- (MKAnnotationView *)mapView:(MKMapView *)theMapView viewForAnnotation:(id<MKAnnotation>)annotation {
    static NSString *placeMarkIdentifier = @"SimplePinIdentifier";
    if ([annotation isKindOfClass:[AddressAnnotation class]]) {
        MKPinAnnotationView *annotationView = (MKPinAnnotationView *)[theMapView dequeueReusableAnnotationViewWithIdentifier:placeMarkIdentifier];
        if (annotationView == nil) {
            annotationView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:placeMarkIdentifier];
        }
        else {
            annotationView.annotation = annotation;
        }
        NSLog(@"my annotation: %@", [annotation description]);
        annotationView.enabled = YES;
        annotationView.animatesDrop = YES;
        annotationView.draggable = YES;
        annotationView.canShowCallout = YES;
        annotationView.tag = ANNOTATION_VIEW_TAG;

        UIButton *detailDisclosureButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
        annotationView.rightCalloutAccessoryView = detailDisclosureButton;

        [self performSelector:@selector(showCallout:) withObject:annotation afterDelay:0.5];

        return annotationView;
    }
    return nil;
}

私はMoreiOS5 Developmentの例を使用しており、自分のAddressAnnotationオブジェクトを使用して呼び出しをカスタマイズしています。したがって、この部分は期待どおりに機能します。

開示が押されると、ユーザーは場所を保存できます(配列に追加するだけです)。それはうまくいきます。したがって、マップをリロードすると、その注釈が追加されます。

私が理解していない部分は、最初のピンをマップに保存した後、ピンを画面上の別の場所にドラッグした場合です。次に、それを再度保存すると、配列に2つのオブジェクトがあります。最初のピンを元の場所からドラッグしたため、現在のmapViewにはピンが1つしかありません。マップをリロードしようとすると、最後にドラッグした場所にピンが1つしかありません。私が期待するようにそれは2つのピンを持っていません。私は基本的にただします:

[self.mapView addAnnotations:_locations]; // where _locations is an array that stores my saved <MKAnnotation> objects

_locationsをNSLogすると、2つのオブジェクトが表示されます。デリゲートが呼び出されると、マップに2つのピンが追加され、配列内の各オブジェクトの画面にピンが追加されると思います。ただし、デリゲートviewForAnnotation:でNSLogを実行すると、元のピンではなく、最後にドラッグしたオブジェクトに対して1回だけ呼び出されます。

何が起きてる?ありがとう!

編集:

場所を保存するコード:

- (void)mapPickerDidSelectMap:(Map *)aMap {
    DataManager *dmgr = [DataManager sharedInstance];
    if (![dmgr locationExists:self.address forMap:aMap]) {
        NSMutableArray *oldLocations = [[NSMutableArray alloc] initWithArray:aMap.locations];
        [oldLocations addObject:self.address];
        aMap.locations = oldLocations;        
    }
    NSLog(@"%s", __FUNCTION__);
    [dmgr.maps enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
        NSLog(@"obj: %@", [obj description]);
    }];
}
4

0 に答える 0