2

したがって、次のようにクラス X を作成しました。

@interface X : NSObject <MKAnnotation> {
    CLLocationCoordinate2D  coordinate;
    NSString * title;
    NSString * subtitle;
    UIImage * image;
    NSInteger * tag;
}

@property (nonatomic, readonly) CLLocationCoordinate2D  coordinate;
@property (nonatomic, retain) NSString * title;
@property (nonatomic, retain) NSString * subtitle;
@property (nonatomic, retain) UIImage * image;
@property (nonatomic, readwrite) NSInteger * tag;

@end

内部:

  • (void) mapView: (MKMapView *) mapView annotationView:(MKAnnotationView *) ビュー calloutAccessoryControlTapped:(UIControl *) コントロール

X が持つタグ プロパティにアクセスできるようにしたいと考えています。これはどのように可能ですか?【制御タグ】はできますか?これはどのように機能すると思われますか?

4

1 に答える 1

1

2 番目の部分については、警告の理由は、プレーンな整数を NSInteger ポインターに代入したことです。NSIntegerタイプintまたはlong

だからあなたは(間違って)やっています:

NSInteger * tag = 2;

編集:

これは、NSInteger を使用する方法です。

NSInteger myi = 42;
NSLog(@"int: %d", myi);

NSInteger * i = &myi;    // i is a pointer to integer here
*i = 43;                 // dereference the pointer to change 
                         // the value at that address in memory
NSLog(@"int: %d", myi);

上記のように、あなたはしようとしています:

NSInteger * i = &myi;
i = 2;                  // INCORRECT: i is an pointer to integer

代わりにtagas として宣言し、プロパティで使用します (正確なコードを提供しますが、私は Linux atm を使用しています ...)。NSIntegerNSInteger*assign

編集の終わり

最初の部分では、オブジェクトがXメソッドにどのように渡されるのかわかりませんが、メソッドが object からデータを取得するためにメソッドが使用しているインターフェースの一部である[yourobject tag]場合は、できるはずです。tagX

つまり、MKAnnotationプロトコルにはプロパティがないtagため、オブジェクトをオブジェクトのタイプに型キャストする必要があるということです。たとえばX *anX = (X*)self.annotation;annotationオブジェクトがどこから来ても、タグにアクセスできる必要があります[anX tag]-それがXオブジェクトの場合

カスタム アノテーションを使用するこのサンプル コードは、Apple ドキュメントで見つけました。

この例では、ビューに注釈が設定されています。

ビューが描画されると、注釈プロトコルを実装するオブジェクトからのデータが使用されます。オブジェクトは、値にアクセスする前に実際のオブジェクトに型キャストされます (ビューの描画方法を参照)。

ビューで新しい注釈がどのように設定されているかをコントローラーで確認できregionDidChangeAnimatedます。

于 2011-02-01T23:49:22.883 に答える