0

人物オブジェクトを作成しました

ABRecordRef person = ABPersonCreate(); 

Webサービスから人のプロパティを設定します。person名、姓、メールID、電話番号、住所、URLなどのすべてのプロパティが設定されています。

複数のピンを含むマップビューをロードしたいのですが、特定の各ピンが特定の人物に関する情報を保持しています。各ピンをクリックするだけで、各人のABPersonViewControllerクラスをロードする必要があります。自分が持っている情報に注釈を追加する方法や、特定のピンが特定の人物に関する情報を保持する方法がわかりません。この場合、その人は私の名簿に載っているかもしれませんし、入っていないかもしれません。私はその人を私の名簿に保存する必要はありません。私はこれを行う方法について本当に混乱しています。助けが必要。

編集:

私は3つのクラスを持っています:

!。Web serviceクラス:personオブジェクトがある場所。2.MapViewクラス:マップビューをロードする場所。3.Annotationクラス:私の注釈に関する詳細があります。

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

4

1 に答える 1

1

まず、プロトコルも実装するPersonクラス (のサブクラス) を作成します。必要に応じて、2 つの別個のクラス (「Person」と「PersonAnnotation」) を作成できますが、必須ではありません。NSObjectMKAnnotation

このPersonクラスでは、名、姓、電子メール アドレスなど、個人に関連する独自のプロパティを宣言することも、ABRecordRefivar を使用して個別のフィールドを保存することもできます。

AB固有のコードを分離し、レコードの作成とリリースをより簡単に管理するためABPersonに実際に示したい場合にのみ、レコードを作成します。とにかく、作成しただけではアドレス帳には追加されません。ABPerson リファレンス ドキュメントには次のように記載されています。ABPersonViewControllerABPersonABRecordRef

個人レコードは、必ずしもアドレス帳データベースに保存する必要はありません。個人レコードを使用して、メモリ内の連絡先情報をグループ化し、たとえば個人ビュー コントローラー (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;
于 2012-03-22T15:38:16.220 に答える