我正在尝试使用this Address Book guide中的代码实现一些写入联系人的代码。我在ViewController.h中声明了一个属性:
@property ABRecordRef mABRecordRef;
然后我检索一条记录:
- (BOOL)peoplePickerNavigationController:
(ABPeoplePickerNavigationController *)peoplePicker
shouldContinueAfterSelectingPerson:(ABRecordRef)person {
此时,我可以成功拨打ABRecordSetValue
:
CFErrorRef anError = NULL;
bool didSet;
didSet = ABRecordSetValue(person, kABPersonFirstNameProperty, (CFStringRef)@"foo", &anError);
if( didSet )
{
// ...
在这种方法中,我还保存了记录:
self.mABRecordRef = person;
在一些用户操作(在另一种方法中)之后,我尝试以相同的方式使用此记录:
CFErrorRef anError = NULL;
bool didSet;
didSet = ABRecordSetValue(self.ABRecordRef, kABPersonFirstNameProperty, (CFStringRef)@"foo", &anError);
但是我收到了一个错误:
EXC_BAD_ACCESS(code=2, address=0x...
这是为什么?我假设(可能不正确)我的ABRecordRef
在我的第一次和第二次使用之间没有被释放。
我也试过保存该记录的UniqueId以及peoplePicker.addressBook
,然后再将相同的记录拉回来,但我得到了类似的错误。