使用ABRecordRef @property会触发EXC_BAD_ACCESS

时间:2012-03-24 02:30:07

标签: iphone ios abaddressbook

我正在尝试使用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,然后再将相同的记录拉回来,但我得到了类似的错误。

0 个答案:

没有答案