1

(MyMapPoint *)mapPointで宣言されたmapPointなど、いくつかのインスタンス変数を保持するNSObjectクラス「MyItem」があります。このMKMapPointを使用して、MKMapViewに注釈を追加します。NSMutablearray"allItems"はすべてのアイテムを保持します。

int all =[allItems count];
int i =0;    
for (i=0; i<all; i++) {

MyItem *p = [allItems objectAtIndex:i];
[mYView addAnnotation:[p mapPoint]];

これは完璧に機能します。アイテムが登録されたピンでいっぱいのマップを取得します。また、ピンを押すとバブルが発生し、タイトルとサブタイトルが表示されます。また、コンソールにコールアウトを追加することもできました。

NSLog (@"bubble is pushed");

これも問題なく動作します。

問題:バブルを押すときに、(最初に)コンソールにピンが表す実際のアイテムの完全な説明をログに記録させたい。完全なMyItemまでさかのぼるサンプルコードはありますか?ピンにはその起源の記憶がないようです。すべてのヘルプ、サンプルコード、およびサンプルコードへのリンクは大幅に適用されます。

4

1 に答える 1

1

アノテーション用に別のタイプ(つまり、-mapPointメソッドによって返されるもの)があるようです。これに対処する簡単な方法は、MKAnnotationプロトコルをMyItemクラスに直接実装することです。そのように、代わりに:

[mYView addAnnotation:[p mapPoint]];

あなたはただ言うことができます:

[mYView addAnnotation:p];

データオブジェクトに採用することMKAnnotationで、ユーザーが注釈ビューをタップしたときに必要なデータに直接アクセスできます。

もちろん、別の方法は、アノテーション内のデータオブジェクトにポインタを戻すことです。データオブジェクトが大きい場合、またはデータオブジェクトが非常に多い場合は、これがより理にかなっています。実際のオブジェクトポインタである必要はありません。後でデータオブジェクトを復元できるように、注釈に情報を格納するだけで済みます。したがって、たとえば、注釈に識別子を含めることができます。ユーザーが注釈ビューをタップすると、識別子を使用してデータストアから関連データを取得します。

簡単な答え:注釈をデータに接続するのはあなたの責任です。フレームワークはあなたのためにそれをしません。

于 2012-08-08T16:07:12.843 に答える