2012-03-22 6 views
0

に注釈を追加するためにどのように私は私のウェブサービスから人物のプロパティを設定する人物オブジェクトmkmapview

ABRecordRef person = ABPersonCreate(); 

を作成しました。 personには、ファーストネーム、姓、電子メールID、電話番号、住所、URLなどのプロパティがすべて設定されています。

地図ビューを読み込むには複数のピンが必要です。特定の人。各ピンのクリックで、私はABPersonViewControllerのクラスを読み込む必要があります。私は、私が持っている情報と特定のピンがどのように特定の人に関する情報を保持することができるのかを注釈を追加する方法についてはわかりません。 この場合、その人は自分のアドレス帳に入っていてもいなくてもよく、その人を自分のアドレス帳に保存する必要はありません。 これを行う方法について私は本当に混乱しています。助けが必要。

編集:私は3つのクラスを持っている

!。 Web serviceクラス:私はpersonオブジェクトを持っています。 2. MapViewクラス:マップビューを読み込みます。 3. Annotation class:私の注釈についての詳細を持っています。

私は人の記録をどのように使用し、ABPersonViewControllerで提示しますか?私のannotationクラスはどのようにすべきですか?

+0

を使用してPersonアノテーションオブジェクトを取得できますか?特に混乱はありますか? ABPersonに個人情報を保存する必要がありますか?おそらく、実際にABPersonViewControllerを表示する必要があるときに、ABPersonを作成することができます。 ABPersonのivarで注釈クラスを作成できるはずです。 – Anna

+0

「人」を「ABPerson」に保存すると自動的に「人」が電話帳に保存されますか?私の場合、私のアドレス帳に 'person 'を保存する必要はありません。' mapview'のピンをクリックすると 'person'のvCardを表示するだけです。 –

+0

Webサービスクラスでは、ABPersonを作成していますか?あなた自身の "Person"クラスはありますか?メモリにABPersonレコードを作成するだけでは、アドレス帳に追加されないと思います。 – Anna

答えて

1

MKAnnotationプロトコルも実装しているPersonクラス(サブクラスはNSObject)を作成します。必要であれば、2つの別々のクラス( "Person"と "PersonAnnotation")を作成することができますが、必要ではありません。

Personクラスでは、名前、姓、電子メールアドレスなどの個人関連のプロパティを宣言するか、またはABRecordRef ivarを持つことができ、個々のフィールドを格納することができます。

私は実際に孤立AB-固有のコードを維持するとABPersonレコードの作成を管理し、より簡単にリリースするABPersonViewControllerを表示したいとき、私は唯一のABPersonレコードを作成します。それにかかわらず、ABRecordRefを作成してもアドレス帳には追加されません。 ABPerson Reference documentationが言うように:

個人レコードは、必ずしもアドレス帳 データベースに格納されている必要はありません。連絡先 の連絡先をメモリにグループ化して、たとえば、ユーザービューコントローラー(ABPersonViewController) を介してユーザーレコードをユーザーに提示する方法として、個人レコードを使用できます。

のでPersonクラスには、次のようになります。

@interface Person : NSObject<MKAnnotation> 
@property (nonatomic, copy) NSString *firstName; 
@property (nonatomic, copy) NSString *lastName; 
@property (nonatomic, copy) NSString *emailAddress; 
@property (nonatomic, assign) CLLocationCoordinate2D coordinate; 
@end 


@implementation Person 

@synthesize firstName; 
@synthesize lastName; 
@synthesize emailAddress; 
@synthesize coordinate; 

-(NSString *)title 
{ 
    return [NSString stringWithFormat:@"%@ %@", firstName, lastName]; 
} 

-(NSString *)subtitle 
{ 
    return emailAddress; 
} 

@end 

WebサービスクラスはPersonのインスタンスを作成し、プロパティを設定します。(人がすでにMKAnnotationを実装しているので)すると、マップビュークラスは、マップに直接そのインスタンスを追加します。ピンをタップすると、マップビューがdidSelectAnnotationViewデリゲートメソッドを呼び出します

[mapView addAnnotation:person]; 

。または、アノテーションのコールアウトに開示ボタンをviewForAnnotationに追加し、calloutAccessoryControlTappedデリゲートメソッドの応答ボタンに応答することもできます。

どの方法を使用するかは、その方法ではABRecordRefを作成し、その値を注釈オブジェクトから設定してからABPersonViewControllerを表示します。どちらのデリゲートメソッドでも、

Person *personTapped = (Person *)view.annotation; 
+0

もう1つ質問があります。メソッドのアーギュメントとして 'ABRecordref'を渡す方法。 –

+1

[GroupViewController.mのサンプルアプリケーションABUIGroups](http://developer.apple.com/library/ios/#samplecode/ABUIGroups/Listings/Classes_GroupViewController_m.html#//apple_ref/doc/uid/DTS40011307-Classes_GroupViewController_m- DontLinkElementID_8)、例のために 'nameForSource'メソッドを探します。 – Anna

+0

'ABRecordRef *'(別名 'const void *') 'ABRecordRef *'(別名 'const void **')のパラメータに 'ABRecordRef'(別名 'const void *')を送信すると修飾子を破棄します。 –