2011-04-12 107 views
1

我想通過向設備地址簿添加新記錄(基本上是將私人聯繫人列表與設備AB合併)來在iPhone上創建定製地址簿。那麼我想,讓用戶選擇一個聯繫人,我以爲我可以用ABPeoplePickerNavigationController.addressbook物業辦:在iPhone上爲ABPeoplePickerNavigationController定製地址簿

ABAddressBookRef contacts = ABAddressBookCreate(); 

for (PrivateUserType *user in rosterItems) 
{ 
    CFErrorRef err = NULL; 
    ABRecordRef ref = ABPersonCreate(); 
    ABRecordSetValue(ref, kABPersonLastNameProperty, (CFStringRef)user.lastName, &err); 

    if (err != NULL) 
    { 
    NSString *errorStr = [(NSString *)CFErrorCopyDescription(err) autorelease]; 
    NSLog(@"Can not set name: %@", errorStr); 
    } 

    ... 

    ABAddressBookAddRecord(contacts, ref, &err); 
    if (err != NULL) 
    { 
    NSString *errorStr = [(NSString *)CFErrorCopyDescription(err) autorelease]; 
    NSLog(@"Error adding XMPP roster user to addressbook: %@", errorStr); 
    } 
} 

ABPeoplePickerNavigationController *picker = [[ABPeoplePickerNavigationController alloc] init]; 
picker.addressBook = contacts; 
[viewController presentModalViewController:picker animated:YES]; 
[picker release]; 

的條目成功添加到地址簿(其中,如果我做了一個ABAddressBookSave()後,我可以驗證循環添加一切)。但是,條目不會被picker顯示(除非我保存聯繫人,這當然會將所有更改保存到設備地址簿中)。

有沒有辦法做到這一點?這是在iOS 4.3.1上。

謝謝!

回答

2

正如Toro所說,您需要先保存對數據庫的任何更改。 ABPeoplePickerNavigationController不打算使用取消提交數據或自定義數據。

你可以在Apple Dev論壇上看到相當新鮮的話題 https://devforums.apple.com/message/370070#370070 問題類似的地方被問到。蘋果公司的人說:「我看不出有什麼辦法可以做到這一點。」但他建議填補一個錯誤,以便在將來的iOS版本中實現此功能。

所有你現在能做的就是代碼自己從地面:(

更新此地址簿UI:他,他,我發現你的應用開發論壇的問題太)))

+0

感謝您的回答。我幾乎認爲是這種情況,但希望有其他事情。呃,好吧。謝謝.. – 2011-04-13 21:26:07

0

您需要通過保存對數據庫的任何更改ABAddressBookSave()方法。

The apple doc link

+0

呀,我知道它適用於ABAddressBookSave(),但希望不使用它。不過,感謝您的幫助。 – 2011-04-13 21:26:38

+0

如果您想以非浮動方式顯示這些聯繫人,則需要改用ABRecordRef。您可以瀏覽那些ABRecordRef中的信息。但是,直到ABAddressBookSave()到db,那些ABRecordRef沒有有效的記錄ID。因爲他們沒有保存到數據庫。 – AechoLiu 2011-04-14 02:03:39