iOS: Error deleting contacts from Address book: [CNDataMapperContactStore executeSaveRequest:error:]

iOS: Error deleting contacts from Address book: [CNDataMapperContactStore executeSaveRequest:error:]

我正在尝试删除地址簿中的联系人,但出现以下错误。

这是我的实现:

 CNMutableContact *contact = [[cnContacts objectAtIndex:i] copy];
        [cnContacts removeObjectAtIndex:i];


        CNSaveRequest *request = [[CNSaveRequest alloc] init];
        [request deleteContact:contact];

        NSError *error;
        if (![self.ContactStore executeSaveRequest:request error:&error]) {
            if (error)
            {
                NSLog(@"error = %@", error.description);
            }
        }

这一行:

if (![self.ContactStore executeSaveRequest:request error:&error]) {

我在控制台中收到此错误:

-[CNContact setSnapshot:]: 无法识别的选择器发送到实例 0x145de3940

还显示此错误:

Contacts`-[CNDataMapperContactStore executeSaveRequest:error:]:
libdispatch.dylib`_dispatch_mgr_thread:

你们中的任何人都知道为什么会出现此错误或我在实施过程中做错了什么。

我不知道这个 API,但环顾四周我看到了:

[request deleteContact:contact];

需要一个 CNMutableContact 对象,并且您已通过使用 copy:

使其不可变
 CNMutableContact *contact = [[cnContacts objectAtIndex:i] copy];
 // contact is actually a CNContact object

你想要 mutableCopy,但是我认为根本不需要创建副本,假设 cnContacts 包含 CNMutableContact 个实例,因为从数组中删除它不会销毁该对象,因为您仍然在本地引用它。

我只能假设 snapshotCNMutableContact 的私有 属性,它在 CNContact 上不可用,因此 无法识别的选择器 异常(我在 class 参考文献中看不到任何有关此 属性 的内容)。