前言:
此记录是我在适配iOS10时的体验,供大家参考指正。
我的项目的适配工作主要有以下两点:
1.访问权限的添加
在info.plist文件添加权限,APP中用到了什么权限就添加什么权限,在iOS10中如果是因为缺少权限引起的崩溃,在控制台会打印出相应日志。
下图是缺少相册权限的日志:
方式一:
其中:key值是固定的,string的值可以随意写
方式二:
也可采用下图的方式添加(推荐使用)
2.iOS废弃API的更换
在iOS中联系人框架就已经由AddressBook更换成了Contacts,在iOS10中,如果不更换新的框架,在选取联系人时,会引起程序崩溃。
新联系人框架参考资料:http://www.jianshu.com/p/df0ea100c3da
// 1.创建选择联系人的控制器
CNContactPickerViewController *contactVc = [[CNContactPickerViewController alloc] init];
// 2.设置代理
contactVc.delegate = self;
// 3.弹出控制器
[self presentViewController:contactVc animated:YES completion:nil];
#pragma mark - <CNContactPickerDelegate>
// 当选中某一个联系人时会执行该方法
- (void)contactPicker:(CNContactPickerViewController *)picker didSelectContact:(CNContact *)contact
{
// 1.获取联系人的姓名
NSString *lastname = contact.familyName;
NSString *firstname = contact.givenName;
NSLog(@"%@ %@", lastname, firstname);
// 2.获取联系人的电话号码
NSArray *phoneNums = contact.phoneNumbers;
for (CNLabeledValue *labeledValue in phoneNums) {
// 2.1.获取电话号码的KEY
NSString *phoneLabel = labeledValue.label;
// 2.2.获取电话号码
CNPhoneNumber *phoneNumer = labeledValue.value;
NSString *phoneValue = phoneNumer.stringValue;
NSLog(@"%@ %@", phoneLabel, phoneValue);
}
}
// 当选中某一个联系人的某一个属性时会执行该方法
- (void)contactPicker:(CNContactPickerViewController *)picker didSelectContactProperty:(CNContactProperty *)contactProperty
{
_payeeName.text = @"";
_payeePhone.text = @"";
// 获取姓名
NSString *lastname = contactProperty.contact.familyName;
NSString *firstname = contactProperty.contact.givenName;
NSLog(@"%@ %@", lastname, firstname);
_payeeName.text = [NSString stringWithFormat:@"%@%@", [CSIIConfigDictUtil handleStr:firstname], [CSIIConfigDictUtil handleStr:lastname]];
// 获取手机号
if ([CNContactPhoneNumbersKey isEqualToString:contactProperty.key]) {
CNPhoneNumber *phoneNumber = contactProperty.value;
NSString *phone = [CSIIConfigDictUtil handleStr:phoneNumber.stringValue];
NSLog(@"%@", phone);
// 过滤掉非数字字符
NSCharacterSet *set = [[NSCharacterSet characterSetWithCharactersInString:@"0123456789"] invertedSet];
phone = [[phone componentsSeparatedByCharactersInSet:set] componentsJoinedByString:@""];
if (phone.length > 11) {
_payeePhone.text = [phone substringFromIndex:phone.length-11];
} else {
_payeePhone.text = phone;
}
}
}
// 点击了取消按钮会执行该方法
- (void)contactPickerDidCancel:(CNContactPickerViewController *)picker
{
[self dismissViewControllerAnimated:YES completion:^{}];
}
在适配工作中暂时就遇到这两点,以后遇到别的问题会再做记录。