ABAddressBookSave关于保存到通讯录失败的问题

首先,一切的前提是你添加通讯录的语句没有任何错误。

然后就是

// 将新建的联系人添加到通讯录中

    ABAddressBookAddRecord(addressBook, person, NULL);

  下一步保存通讯录  为了大家更好的学习处理这种不会导致崩溃和提示的报错 建议大家创建一个Error对象来看看系统给出的错误提示

    CFErrorRef error = NULL;

    if(ABAddressBookSave(addressBook, &error))

    {

        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提示" message:@"已成功将联系人导入通讯录" delegate:self cancelButtonTitle:@"确认" otherButtonTitles:nil];

        [alert show];

        

    }

    else

    {

        NSLog(@"%@",error);

        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提示" message:@"导入失败" delegate:self cancelButtonTitle:@"确认" otherButtonTitles:nil];

        [alert show];

    }


输出的error:The error is "Error Domain=ABAddressBookErrorDomain Code=1 "The operation couldn’t be completed. (ABAddressBookErrorDomain error 1.)"


这个错误的大致意思就是说操作未完成,其实对我是没有任何作用的,但是至少这个错误告诉了我们一件事,就是我们写的代码不存在任何问题。既然代码没有问题,那为什么将联系人保存到通讯录会失败呢?  答案似乎只有一种可能 就是系统不允许你访问通讯录  

解决办法:首先在手机的隐私设置,通讯录隐私看看权限是否打开。

然后在导入之前先给出一个请求应用访问通讯录的代码。

if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusNotDetermined) {

        ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) {

            第一次的时候系统就会弹出一个提示框告诉用户是否允许该应用访问通讯录

        });

    }

    else if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusAuthorized) {

        说明可以访问

        

    }

    else {

         可能是用户关闭了访问通讯的权限。

    }


好了,关于通讯录不能保存数据的问题终于解决了。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值