根据iOS 6使用地址簿的文档捕获22
根据iOS6的文档,应使用ABAddressBookCreateWithOptions创建地址簿。
它还说如果调用者无法访问db,则此方法将返回null。
但是,通过调用ABAddressBookRequestAccessWithCompletion请求访问,该方法将ABAddressBookRef作为参数。
因此,根据文档,如果您没有访问权限,则无法首先获取ABAddressBookRef,但要获取访问权限,您必须将ABAddressBookRef作为参数传递。
呃。 赶上22? 那么如何创建ABAddressBookRef呢?
谷歌搜索一些示例/教程代码,但没有找到任何。
TIA
我使用这样的代码:
if (ABAddressBookCreateWithOptions) { _book = ABAddressBookCreateWithOptions(NULL, NULL); if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusNotDetermined) { ABAddressBookRequestAccessWithCompletion(_book, ^(bool granted, CFErrorRef error) { dispatch_async(dispatch_get_main_queue(), ^{ if (granted && !error) { ABAddressBookRevert(_book); } }); }); } } else { _book = ABAddressBookCreate(); }
其中_book
是我的ABAddressBookRef。
如果我的应用程序被拒绝访问,则_book将为NULL,您无法访问通讯簿。
在这里看到我的答案:
https://stackoverflow.com/a/13671852/341994
ABAddressBookRequestAccessWithCompletion没用,应该被忽略。
-
如果您需要知道授权状态,请调用
ABAddressBookGetAuthorizationStatus
。 -
如果授权未确定(用户从未运行此应用程序),则只需尝试访问数据库。 这将导致出现授权警报。
-
如果用户已授权或拒绝访问,则ABAddressBookRequestAccessWithCompletion不执行任何任何值,因此无需调用它。