有没有办法在iPhone中以编程方式编辑联系人?例如,我想修改ABPeoplePickerNavigationController
返回的联系人。我怎样才能做到这一点?我有:
(BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person
{
NSString *phoneNum = @"01234567890";
ABAddressBookRef addressBook = ABAddressBookCreate();
contact = ABAddressBookGetPersonWithRecordID(addressBook, ABRecordGetRecordID(person));
if(phoneNum && contact != NULL)
{
ABMutableMultiValueRef phoneNumberMultiValue = ABMultiValueCreateMutable(kABMultiStringPropertyType);
ABMultiValueAddValueAndLabel(phoneNumberMultiValue, phoneNum, kABPersonPhoneMobileLabel, NULL);
[self dismissModalViewControllerAnimated:YES];
ABRecordSetValue(contact, kABPersonPhoneProperty, phoneNumberMultiValue, nil);
//THIS CODE IS NOT BEHAVING AS I EXPECTED,
//if(ABAddressBookHasUnsavedChanges(addressBook))//Anyway this needs to be checked
{
ABAddressBookSave(addressBook, NULL);
}
}
return NO;
}
对ABAddressBookSave(addressBook, NULL);
的调用正在进行中。但问题是,“联系人”的所有旧信息都从地址簿中删除,最后只保存了“phoneNum”。
我该如何解决这个问题?
答案 0 :(得分:1)
对前一个答案道歉 - 我读错了这个问题......!我以为联系人根本没有保存在地址簿上。
似乎丢失的唯一信息是联系人的其他电话号码,对吗?这意味着ABRecordRef的其他详细信息(如地址,备注,出生日期等)保持不变。
如果这是正确的,我认为解决其他电话号码删除的唯一可行方法是简单地将PhoneLabel附加到联系人现有的kABPersonPhoneProperty。而不是为电话号码创建新的ABMutableMultiValueRef,而是从记录中复制它,如下所示:
ABMutableMultiValueRef phoneNumberMultiValue = ABMultiValueCreateMutableCopy((ABMultiValueRef)ABRecordCopyValue(contact, kABPersonPhoneProperty));
有了这个,您现在可以使用相同的代码附加新电话号码:
ABMultiValueAddValueAndLabel(phoneNumberMultiValue, phoneNum, kABPersonPhoneMobileLabel, NULL);
关于这一点的好处是没有更换或删除 - 应用程序只是将另一个电话号码添加到联系人的电话号码属性。 :d
希望这有帮助。
答案 1 :(得分:0)
您应该做的第一件事是将对CFErrorRef的引用作为ABAddressBookSave的第二个参数传递;它可能是因为你试图报告错误,但却无法报告,因为你没有给出这个论点。
答案 2 :(得分:0)
目前无法编辑和保存与地址簿的联系。 IPhone API不支持此要求。为了编辑特定的联系人,我们需要通过记录ID获取该联系人的参考,并将所有信息复制到参考,然后将该联系人保存到地址簿。