代码之家  ›  专栏  ›  技术社区  ›  JiteshW

在ABAddressBookSave上获取EXC_BAD_ACCESS

  •  2
  • JiteshW  · 技术社区  · 11 年前

    我正在使用以下代码将联系人从通讯簿中删除。(在iOS 5.0上)。但它每次都会给我EXC_BAD_ACCESS ABAddressBookSave(addressBook, NULL); 。我已经选择了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);
    

    出了什么问题?

    1 回复  |  直到 10 年前
        1
  •  4
  •   Community    7 年前

    问题出在这一行:

    ABRecordRef person = ABAddressBookCopyArrayOfAllSources(addressBook);
    

    ABAddressBookCopyArrayOfAllSources 返回 CFArray ABRecord

    如果你想从通讯录中删除一个人,你需要获得他的参考资料,比如:

    ABRecordRef person = ABAddressBookGetPersonWithRecordID(addressBook, recordID);
    

    其中recordID,您试图删除的人的id(您需要获取此id)。

    关于如何从通讯录中找到一个人的更多信息,你可以看看 at this SO response