根据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不执行任何任何值,因此无需调用它。