2013-01-14 53 views
1

我希望能夠從ABPeoplePickerNavigationController中選擇記錄,然後向該聯繫人添加電子郵件,但是從我的視圖控制器中添加。如何編輯ABAddressBook上的記錄

我試圖尋找在ABAddressBook類引用,看看有什麼我可以做,但沒有見解=/

我在這裏堅持的人蔘考,任何人都知道的方式進行?

- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person 

我在使用ABRecordSetValue(person, kABPersonEmailProperty, (__bridge CFStringRef)@"[email protected]", &error);時遇到了EXC_BAD_ACCESS,但沒有記錄錯誤。

UPDATE

好吧,我設法將其保存到peoplePicker代表像這裏面:

- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person { 

    ... 

    self.addressBook = peoplePicker.addressBook; 
    self.selectedPerson = person; 

    // adding to native contacts 
    CFErrorRef error = nil; 
    ABMutableMultiValueRef emailMultiValue = ABMultiValueCreateMutable(kABPersonEmailProperty); 
    bool didAddEmail = ABMultiValueAddValueAndLabel(emailMultiValue, (__bridge CFTypeRef)(email), kABOtherLabel, NULL); 
    if(didAddEmail){ 
     ABRecordSetValue(self.selectedPerson, kABPersonEmailProperty, emailMultiValue, nil); 
     NSLog(@"Email saved......"); 
    } else { 
     NSLog(@"Error adding email: %@", error); 
    } 
    ABAddressBookSave(self.addressBook, NULL); 

    ... 
} 

奇怪的是,如果我嘗試這樣做,這種方法外,如用戶輸入後,在textField上,我得到一個錯誤。

然後檢查我的日誌,而內部和外部的peoplePickerNavigationController方法上面:

(lldb) po self.selectedPerson 
(ABRecordRef) $1 = 0x0a1838f0 <CPRecord: 0xa1838f0 ABPerson> 
(lldb) po self.selectedPerson 
(ABRecordRef) $4 = 0x0a1838f0 [no Objective-C description available] 

第一個日誌似乎是正常的,因爲它代表法內完成,但第二個是怪異的,我的意思是內存參考在那裏,但沒有內容...第二個被記錄在PeoplePicker被解僱後...

爲什麼發生這種情況?

我的.h文件:

@property (nonatomic) ABAddressBookRef addressBook; 
@property (nonatomic) ABRecordRef selectedPerson; 

回答

1

我的解決辦法,以挽救人的ID,然後再和使用訪問通訊錄: ABAddressBookGetPersonWithRecordID(addressBook, self.selectedPersonID)

,並重新創建通訊錄。

ABAddressBookRef addressBook = ABAddressBookCreate(); 
+0

如何保存人員ID?沒關係。找到它:ABRecordID recordID = ABRecordGetRecordID(newPerson); – zumzum