1

ユーザーが追加できるピンがいくつかあります。コールアウトにはボタンがあります。ユーザーがボタンを押すと、新しいピンがその場所にドロップされ、ユーザーが押したピン (さまざまな種類のピン) を削除したいと考えています。

基本的に、最初のピンはドラッグ可能で、ユーザーが適切な場所を見つけたら、それを「ロック」します。(ロックされたピンはいくつかの点で異なる動作をするため、古いピンを交換する必要があります)

とにかく、これは私が処理を行う方法です。[mapView removeAnnotation:view.annotation]; に到達すると、私が得るのは、「プログラム受信信号:「EXC_BAD_ACCESS」」だけです。

誰か助けてくれませんか?(問題は、新しい注釈が表示されるように表示されないことではありません。問題は、古い注釈が消えないことです)。編集: 提案に従ってコードを修正しました。

    - (void) mapView:(MKMapView *)MapView   
      annotationView:(MKAnnotationView *)view 
calloutAccessoryControlTapped:(UIControl *)control {
    LockedPotholeAnnotation *annotation = [[[LockedPotholeAnnotation alloc] initWithCoordinate:view.annotation.coordinate addressDictionary:nil]autorelease];
     NSString *titleString = [NSString stringWithFormat:@"Pothole at %.4f, %.4f", view.annotation.coordinate.latitude, view.annotation.coordinate.longitude];
     annotation.title = titleString;
     [mapView addAnnotation:annotation];
     //[annotation release];
     NSLog(@"Added Pin");
     NSLog(@"VA: %@", [view.annotation class]);
     [mapView removeAnnotation:view.annotation];
     //[mapView removeAnnotations:mapView.annotations];
     [mapView setNeedsDisplay]; 
}
4

1 に答える 1

1

これだけではないかもしれませんが、最初に飛び出すのはautorelease、注釈を付けた行に注釈を付けるallocことです。したがって、releaseに追加した後も、それを行うべきではありませんmapView

このままでは、自動解放プールが空になると、アノテーションは時期尚早に割り当て解除される可能性があります。正確にそうでない場合は、まだ時期尚早な後続の時点で解放されます。マップ ビューは、古いポインターとブームで動かなくなります。

あなたが説明するとすぐにそれが現れる理由がわからないので、何か他のものもあるかもしれません...

于 2010-10-19T17:53:51.293 に答える