Ios 在ABAddressBookSave上获取EXC\u BAD\u访问权限

Ios 在ABAddressBookSave上获取EXC\u BAD\u访问权限,ios,iphone,exc-bad-access,addressbook,Ios,Iphone,Exc Bad Access,Addressbook,我正在使用下面的代码从我的通讯录中删除联系人。在iOS 5.0上。但每次在ABAddressBookSaveaddressBook,NULL;上都会给我提供EXC\u BAD\u访问权限;。我选择了NSZombieEnalbeld,但它仍然没有给我明确的错误 ABAddressBookRef addressBook = ABAddressBookCreate(); CFErrorRef error = NULL; ABRecordRef person = ABAddressBookCopy

我正在使用下面的代码从我的通讯录中删除联系人。在iOS 5.0上。但每次在ABAddressBookSaveaddressBook,NULL;上都会给我提供EXC\u BAD\u访问权限;。我选择了NSZombieEnalbeld,但它仍然没有给我明确的错误

ABAddressBookRef addressBook = ABAddressBookCreate();
 CFErrorRef error = NULL;

 ABRecordRef person = ABAddressBookCopyArrayOfAllSources(addressBook);

 BOOL success = ABAddressBookRemoveRecord(addressBook, person, &error);

 if (success)
 {
     BOOL su = ABAddressBookSave(addressBook, NULL);
     NSLog(@"Removed ----");
 }
 CFRelease(addressBook);

出什么问题了?

这条线路有问题:

ABRecordRef person = ABAddressBookCopyArrayOfAllSources(addressBook);
返回CFArray而不是ABRecord

如果要从通讯簿中删除某人,则需要获取其引用,如:

ABRecordRef person = ABAddressBookGetPersonWithRecordID(addressBook, recordID);
其中recordID是您试图删除的人的id,您需要获取该id


有关如何从通讯簿获取联系人的更多信息,请查看

问题在于这一行:

ABRecordRef person = ABAddressBookCopyArrayOfAllSources(addressBook);
返回CFArray而不是ABRecord

如果要从通讯簿中删除某人,则需要获取其引用,如:

ABRecordRef person = ABAddressBookGetPersonWithRecordID(addressBook, recordID);
其中recordID是您试图删除的人的id,您需要获取该id

至于如何从通讯录中找到一个人的更多信息,你可以看看