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;
を使用して
Person
アノテーションオブジェクトを取得できますか?特に混乱はありますか? ABPersonに個人情報を保存する必要がありますか?おそらく、実際にABPersonViewControllerを表示する必要があるときに、ABPersonを作成することができます。 ABPersonのivarで注釈クラスを作成できるはずです。 – Anna「人」を「ABPerson」に保存すると自動的に「人」が電話帳に保存されますか?私の場合、私のアドレス帳に 'person 'を保存する必要はありません。' mapview'のピンをクリックすると 'person'のvCardを表示するだけです。 –
Webサービスクラスでは、ABPersonを作成していますか?あなた自身の "Person"クラスはありますか?メモリにABPersonレコードを作成するだけでは、アドレス帳に追加されないと思います。 – Anna