最近在做通讯录方面的事,但是以前用的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
网友评论