【问题标题】:iOS: Error deleting contacts from Address book: [CNDataMapperContactStore executeSaveRequest:error:]iOS:从通讯录中删除联系人时出错:[CNDataMapperContactStore executeSaveRequest:error:]
【发布时间】:2016-04-14 15:48:02
【问题描述】:

我正在尝试删除通讯录中的联系人,但出现以下错误。

这是我的实现:

 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:

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

【问题讨论】:

    标签: ios contacts abaddressbook


    【解决方案1】:

    我不知道这个 API,但环顾四周,我发现:

    [request deleteContact:contact];
    

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

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

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

    我只能假设 snapshotCNMutableContact 的私有属性,这在 CNContact 上不可用,因此 无法识别的选择器 异常(我在类参考中看不到这个属性)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多