iOS开发 使用Contacts删除联系人方法及其遇见的坑

最近在做通讯录方面的事,但是以前用的AddressBook实现的,现在改用Contacts,但是使用其删除联系人API的时候 会莫名崩溃。
提示错误代码如下

[CNContact setSnapshot:]: unrecognized selector sent to instance 0x145de3940

我先上没有解决这个情况时的代码

- (void)delectTheContect:(NSString *)contactKey{
      CNContactStore *store = [[CNContactStore alloc] init];

    //检索
    NSPredicate *predicate =  [CNContact predicateForContactsMatchingName:contactKey];
    
    //根据检索内容 提取数据
    NSArray * contacts = [store unifiedContactsMatchingPredicate:predicate keysToFetch:@[CNContactGivenNameKey,CNContactFamilyNameKey] error:nil];
//获取到联系人
  CNMutableContact *contact1 = [contacts objectAtIndex:0];
//创建修改语句
  CNSaveRequest * saveRequest = [[CNSaveRequest alloc]init];
  [saveRequest deleteContact:contact1];
//执行语句
  [store executeSaveRequest:saveRequest error:nil];
}

细看已经没有语法上的问题,但是在程序执行到

 [store executeSaveRequest:saveRequest error:nil];

就崩溃掉了,但是删除操作已经成功

我一直以为是 executeSaveRequest: 中出了问题,
最后在查了官方文档后,对其框架有一定了解后,发现在

 [saveRequest deleteContact:contact1];

这句话传入的contact1 必须是不可变的,那么只需要在创建或者获取这个联系人的时候

  CNMutableContact *contact1 =[ [contacts objectAtIndex:0] mutableCopy];

对mutableCopy修饰一下就好了!
FUCK IOS SDK

你可能感兴趣的:(iOS开发 使用Contacts删除联系人方法及其遇见的坑)