关闭

iOS10适配

标签: iosiOS10适配
754人阅读 评论(0) 收藏 举报
分类:

前言:

此记录是我在适配iOS10时的体验,供大家参考指正。

我的项目的适配工作主要有以下两点:

1.访问权限的添加
在info.plist文件添加权限,APP中用到了什么权限就添加什么权限,在iOS10中如果是因为缺少权限引起的崩溃,在控制台会打印出相应日志。
下图是缺少相册权限的日志:

这里写图片描述

方式一:
key值是固定的,string的值可以随意写
其中: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:^{}];
}

在适配工作中暂时就遇到这两点,以后遇到别的问题会再做记录。

1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:17199次
    • 积分:254
    • 等级:
    • 排名:千里之外
    • 原创:9篇
    • 转载:2篇
    • 译文:0篇
    • 评论:0条
    文章分类