iOS:从地址簿中删除联系人时出错:[CNDataMapperContactStore executeSaveRequest:error:]

时间:2016-04-14 15:48:02

标签: ios contacts abaddressbook

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

这是我的实施:

 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:

enter image description here enter image description here

你们中的任何人都知道这个错误的原因或我在实施中遇到的错误。

1 个答案:

答案 0 :(得分:1)

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

[request deleteContact:contact];

需要一个CNMutableContact对象,并且您已使用copy使其不可变:

 CNMutableContact *contact = [[cnContacts objectAtIndex:i] copy];
 // contact is actually a CNContact object

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

我只能假设snapshotCNMutableContact的私有财产,CNContact上无法使用,因此无法识别的选择器异常(我什么也看不见)这个属性在类引用中。)