我要做的就是創建一個Person
類(NSObject
的子類),它也實現了MKAnnotation
協議。如果你願意,你可以創建兩個獨立的類(「Person」和「PersonAnnotation」),但沒有必要。
在Person
類,你既可以聲明自己的個人相關屬性,如姓,名,電子郵件地址等,或者你可以只是一個ABRecordRef
伊娃,讓它存儲各個字段爲您服務。
我只會創建一個ABPerson
記錄,當我想要實際顯示ABPersonViewController
時,保持AB特定的代碼被隔離,並且更容易地管理記錄的創建和發佈。無論如何,只要創建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):
[mapView addAnnotation:person];
當引腳被竊聽,地圖視圖將調用didSelectAnnotationView
委託方法。或者,您可以在viewForAnnotation
的註釋標註中添加一個披露按鈕,並在calloutAccessoryControlTapped
委託方法中對此作出響應。
無論您決定使用哪種操作方法,在該方法中,您可以創建ABRecordRef
,從註釋對象中設置其值,然後顯示ABPersonViewController
。
Person *personTapped = (Person *)view.annotation;
其中特別是混亂:在兩種委託方法,所述
Person
註釋對象可以使用檢索?你是否需要將人員信息存儲在ABPerson中?也許你可以在需要實際顯示ABPersonViewController時創建ABPerson。儘管你應該可以用ABPerson ivar創建一個註解類。 – Anna 2012-03-22 13:29:22在'ABPerson'中存儲'person'會自動將'person'保存在手機地址簿中嗎?在我的情況下,我不需要將'person'保存在我的地址簿中,只需要顯示'person'的電子名片,當我點擊'mapview'中的一個管腳時 – 2012-03-22 13:40:29
在Web服務類中,是創建一個ABPerson還是你有自己的「人」課嗎?我不認爲在內存中創建ABPerson記錄會將其添加到地址簿中。 – Anna 2012-03-22 14:30:31