まず、プロトコルも実装するPerson
クラス (のサブクラス) を作成します。必要に応じて、2 つの別個のクラス (「Person」と「PersonAnnotation」) を作成できますが、必須ではありません。NSObject
MKAnnotation
このPerson
クラスでは、名、姓、電子メール アドレスなど、個人に関連する独自のプロパティを宣言することも、ABRecordRef
ivar を使用して個別のフィールドを保存することもできます。
AB固有のコードを分離し、レコードの作成とリリースをより簡単に管理するためABPerson
に実際に示したい場合にのみ、レコードを作成します。とにかく、作成しただけではアドレス帳には追加されません。ABPerson リファレンス ドキュメントには次のように記載されています。ABPersonViewController
ABPerson
ABRecordRef
個人レコードは、必ずしもアドレス帳データベースに保存する必要はありません。個人レコードを使用して、メモリ内の連絡先情報をグループ化し、たとえば個人ビュー コントローラー (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
設定します。次に、マップ ビュー クラスはそのインスタンスをマップに直接追加します (Person は既に MKAnnotation を実装しているため)。
[mapView addAnnotation:person];
ピンがタップされると、マップ ビューはdidSelectAnnotationView
デリゲート メソッドを呼び出します。または、注釈の吹き出しに開示ボタンを追加し、デリゲート メソッドviewForAnnotation
でそれに応答することもできます。calloutAccessoryControlTapped
どのアクション メソッドを使用する場合でも、そのメソッドで を作成しABRecordRef
、注釈オブジェクトからその値を設定して、ABPersonViewController
. どちらのデリゲート メソッドでも、次を使用してPerson
注釈オブジェクトを取得できます。
Person *personTapped = (Person *)view.annotation;