2

MKAnnotationView (ここで説明) で「選択された」プロパティを使用しようとしています。これは、ユーザーが選択した注釈を削除できるようにするためです...

次のコードは、MKMapView で選択されたピンを見つけて削除する必要があります。

CSMapAnnotation *a;

for(a in [mapView annotations])
{
    if([a selected]) //Warning: 'CSMapAnnotation' may not respond to '-selected'
    {
        [mapView removeAnnotation:a];
    }
}

CSMapAnnotation は、次のように定義されたカスタム マップ アノテーションです。

#import <Foundation/Foundation.h>
#import <MapKit/MapKit.h>

// types of annotations for which we will provide annotation views. 
typedef enum {
    kCMapAnnotationTypeStart        = 0,
    kCMapAnnotationTypeCheckpoint   = 1,
    kCMapAnnotationTypeEnd          = 2
} CSMapAnnotationType;

@interface CSMapAnnotation : NSObject <MKAnnotation>
{
    CLLocationCoordinate2D coordinate;
    CSMapAnnotationType    annotationType;
    NSString*              title;
    NSString*              userData;
}

-(id) initWithCoordinate:(CLLocationCoordinate2D)inCoordinate 
          annotationType:(CSMapAnnotationType) annotationType
                   title:(NSString*)title;

- (BOOL) isEqualToAnnotation:(CSMapAnnotation *) anAnnotation;

@property (nonatomic, readwrite) CLLocationCoordinate2D coordinate;
@property (nonatomic, readwrite) CSMapAnnotationType    annotationType;
@property (nonatomic, retain) NSString* title;
@property (nonatomic, retain) NSString* userData;

私は本当に から「継承」していないのでMKAnnotationViewCSMapAnnotationに応答しないと思いますselected

この問題を解決する最善の方法は何ですか??

4

1 に答える 1

1

あなたの仮定は正しいです。CSMapAnnotation は MKAnnotationView を継承せず、選択したプロパティを実装していないため、機能しません。

また、CSMapAnnotation と MKAnnotationView の関係を管理して、注釈ビュー (ピン) を CSMapAnnotation に格納されているデータにマップしていますか? MKAnnotationView には、MKAnnotation ではなく、選択されたプロパティがあることに注意してください。

マッピングを表示するための注釈を正しく管理している場合、これはうまくいくはずです。

CSMapAnnotation *a; 

for(a in [mapView selectedAnnotations])
{
    //You may want a type-check here
    [mapView removeAnnotation:a];
}

あるいは:

[mapView removeAnnotations:[mapView selectedAnnotations]];
于 2010-02-24T21:36:24.290 に答える