您当前的位置: 首页 >  ios

iOS9中关于地址簿ABAddressBookXXX之类方法被废弃的解决

发布时间:2016-03-06 13:52:25 ,浏览量:0

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;)

在iOS9的SDK中我们会发现原来地址簿权限查询,获取以及创建之类的方法都被标记为废弃:

这里写图片描述

虽然仍然可以使用,但是谁也不愿意看到一大堆警告在眼前闪来闪去的的.

下面给出替换方法.

原来的API大家可以注意到都是以C函数给出的,Apple可能觉得这不怎么漂亮,所以他们重新设计了一个CNContactStore类来使其符合Objc类似的赶脚…你可以认为该类对应着iOS设备上地址簿实际存储的数据库.

那么原来的旧的的C方法如何转换为新的一系列方法呢?查看Apple官方的文档(如上图所示),只是简单标记这些方法为已废弃,但并没有给出替换方案,所以这里本猫抛砖引玉,来看看原来访问地址簿权限和申请权限的代码如何修改为新的方法.

首先我们给出原来方法的代码:

switch (ABAddressBookGetAuthorizationStatus()){ case kABAuthorizationStatusAuthorized:{
addressBook = ABAddressBookCreateWithOptions(NULL, &error); /* Do your work and once you are finished ... */ if (addressBook != NULL){
                    CFRelease(addressBook);
                } break; } case kABAuthorizationStatusDenied:{ [self displayMessage:kDenied]; break;
} case kABAuthorizationStatusNotDetermined:{
addressBook = ABAddressBookCreateWithOptions(NULL, &error); ABAddressBookRequestAccessWithCompletion
(addressBook, ^(bool granted, CFErrorRef error) { if (granted){ NSLog(@"Access was granted");
}else{ NSLog(@"Access was not granted");
} if (addressBook != NULL){
                        CFRelease(addressBook);
                    }
}); break; } case kABAuthorizationStatusRestricted:{ [self displayMessage:kRestricted]; break;
} }

然后是新方法的代码:

_contactStore = [CNContactStore new]; // Override point for customization after application launch. switch ([CNContactStore authorizationStatusForEntityType:CNEntityTypeContacts]){ case CNAuthorizationStatusAuthorized: NSLog(@"允许访问地址簿!"); break; case CNAuthorizationStatusDenied: case CNAuthorizationStatusNotDetermined:
            [_contactStore requestAccessForEntityType:CNEntityTypeContacts completionHandler:^(BOOL granted,NSError *error){ if (granted) { NSLog(@"你已允许访问地址薄!");
                }else{ NSLog(@"你不允许访问地址簿!");
                }
            }]; break; default: NSLog(@"其他情况!");
    }

通过以上代码,可以看到新的逻辑变得更清晰了,更重要的是再也不用写C和Objc联姻的”四不像”代码了,虽然某些时候两者的联姻还是有些搞头的… ;)

关于地址簿新旧方法的进一步的内容,大家可以到以下blog观赏:

http://www.appcoda.com/ios-contacts-framework/

关注
打赏
1688896170
查看更多评论

暂无认证

  • 0浏览

    0关注

    108697博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录

0.0482s