ios通讯录访问权限怎么开,iphone访问通讯录权限在哪里
在iOS 6中,以前工作正常的访问通讯录的苹果手机程序可能会出错,现象是程序启动时不提醒用户是否允许程序访问通讯录,同时在"设置-隐私-通讯录"中看不到你的程序。另外,对通讯录进行操作的代码会报类似于以下消息的错误:
无法编译查询语句(abcopyarrayofallinstancesofclassinsourcematchingproperties):
SELECT ROWID,Name,ExternalIdentifier,Type,ConstraintsPath,ExternalModificationTag,ExternalSyncTag,AccountID,Enabled,SyncData,MeIdentifier,ABStore中的启用的功能=?
其原因是iOS 6加强了通讯录访问控制,要求开发人员显式声明需要访问通讯录,方法是调用
ABAddressBookRequestAccessWithCompletion
方法,具体参见官方文档:
http://开发者。苹果。com/library/IOs/#发行说明/General/RN-IOs SDK-6 _ 0/index。超文本标记语言
下面是对应的样例代码,一般来讲需要将这段代码放置在程序启动部分,在程序启动过程中提示用户本程序需要访问设备上的通讯录:
ABAddressBookRef通讯录=ABAddressBookCreate();
_ _ block BOOL accessGranted=NO
if(ABAddressBookRequestAccessWithCompletion!=NULL) {
//我们在iOS 6上
NSLog(@ iOS 6或更高版本,尝试授予访问权限));
dispatch _ semaple _ t sema=dispatch _ semaple _ create(0);
abaddressbookrequestaccesswithcompletion(地址book,^(bool已授予,CFErrorRef错误){
accessGranted=授予
调度信号(sema);
dispatch_semaphore_wait(sema,DISPATCH _ TIME _ ever);
dispatch _ release(sema);
else { //我们使用的是iOS 5或更早版本
NSLog(@ 在iOS 5以上,是可以的);
accessGranted=是
if (accessGranted) {
NSLog(@ 我们获得了访问权限);