2012-03-22 33 views
0

添加註釋創建了一個Person對象我如何的MKMapView

ABRecordRef person = ABPersonCreate(); 

我訂的人的屬性從我的網絡服務。 person有所有的屬性設置,如名字,姓氏,電子郵件ID,電話號碼,地址,網址等

我想加載一個地圖視圖,與多個引腳,其中每個特定引腳持有有關信息特定的人。點擊每個引腳,我需要加載每個人的ABPersonViewController類。我不確定如何使用我擁有的信息添加註釋,以及特定引腳如何保存特定人員的信息。 在這種情況下,此人可能或可能不在我的地址簿中,我也不需要將該人員保存在我的地址簿中。 我真的很困惑如何做到這一點。需要幫忙。

編輯:

我有3類:

Web service職業:我有人物。 2. MapView class:我加載地圖視圖。 3. Annotation class:它具有關於我的註釋的詳細信息。

我將如何使用人員記錄並通過ABPersonViewController來呈現。我的annotation類應該如何?

+0

其中特別是混亂:在兩種委託方法,所述Person註釋對象可以使用檢索?你是否需要將人員信息存儲在ABPerson中?也許你可以在需要實際顯示ABPersonViewController時創建ABPerson。儘管你應該可以用ABPerson ivar創建一個註解類。 – Anna 2012-03-22 13:29:22

+0

在'ABPerson'中存儲'person'會自動將'person'保存在手機地址簿中嗎?在我的情況下,我不需要將'person'保存在我的地址簿中,只需要顯示'person'的電子名片,當我點擊'mapview'中的一個管腳時 – 2012-03-22 13:40:29

+0

在Web服務類中,是創建一個ABPerson還是你有自己的「人」課嗎?我不認爲在內存中創建ABPerson記錄會將其添加到地址簿中。 – Anna 2012-03-22 14:30:31

回答

1

我要做的就是創建一個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; 
+0

我還有一個問題。如何通過'ABRecordref'作爲方法的爭論。 – 2012-03-22 17:08:57

+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 2012-03-22 17:19:13

+0

我收到以下警告'發送'ABRecordRef'(aka'const void *')到'ABRecordRef *'類型的參數(aka'const void **')丟棄限定符' – 2012-03-22 17:35:44