iOS9之后推荐使用CNContactViewController代替ABNewPersonViewController
否则有可能出现如下闪退:
*** Terminating app due to uncaught exception 'CNPropertyNotFetchedException', reason: 'A property was not requested when contact was fetched.'
所以区分了系统调用不同的实现方法
//创建新的联系人
- (void)creatNewRecord {
if([[[UIDevice currentDevice] systemVersion] floatValue] >= 9.0) {
CNMutableContact *contact = [[CNMutableContact alloc]init];
contact.nickname = @"zhongshan";
//电话
CNLabeledValue *phoneNumber = [CNLabeledValue labeledValueWithLabel:CNLabelPhoneNumberMobile value:[CNPhoneNumber phoneNumberWithStringValue:@"18322222222"]];
contact.phoneNumbers = @[phoneNumber];
//5.跳转到新建联系人页面
CNContactViewController *mVC = [CNContactViewController viewControllerForNewContact:contact];
mVC.delegate = self;
[self.navigationController pushViewController:mVC animated:YES];
return;
}
NSMutableDictionary *recordDict = [[NSMutableDictionary alloc]init];
[recordDict setObject:@"zhongshan" forKey:@"name"];
[recordDict setObject:@"18322222222" forKey:@"phone"];
CFErrorRef error = NULL;
//创建一个通讯录操作对象
ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, &error);
//创建一条新的联系人纪录
ABRecordRef newRecord = ABPersonCreate();
//为新联系人记录添加属性值
ABRecordSetValue(newRecord, kABPersonFirstNameProperty, (__bridge CFTypeRef)[recordDict objectForKey:@"name"], &error);
//创建一个多值属性(电话)
ABMutableMultiValueRef multi = ABMultiValueCreateMutable(kABMultiStringPropertyType);
ABMultiValueAddValueAndLabel(multi, (__bridge CFTypeRef)[recordDict objectForKey:@"phone"], kABPersonPhoneMobileLabel, NULL);
ABRecordSetValue(newRecord, kABPersonPhoneProperty, multi, &error);
//添加记录到通讯录操作对象
ABAddressBookAddRecord(addressBook, newRecord, &error);
//保存通讯录操作对象
ABAddressBookSave(addressBook, &error);
ABNewPersonViewController *picker = [[ABNewPersonViewController alloc] init];
picker.newPersonViewDelegate = self;
picker.addressBook = addressBook;
picker.displayedPerson = newRecord;
[self.navigationController pushViewController:picker animated:YES];
CFRelease(multi);
CFRelease(newRecord);
CFRelease(addressBook);
}
#pragma mark - ABNewPersonViewControllerDelegate
- (void)newPersonViewController:(ABNewPersonViewController *)newPersonView didCompleteWithNewPerson:(ABRecordRef)person {
[self.navigationController popViewControllerAnimated:YES];
}
#pragma mark - CNContactViewControllerDelegate
- (void)contactViewController:(CNContactViewController *)viewController didCompleteWithContact:(CNContact *)contact {
[self.navigationController popViewControllerAnimated:YES];
}
浙公网安备 33010602011771号