为什么弃用的ABAddressBook API会崩溃iOS 10?

时间:2016-10-02 00:06:02

标签: ios abaddressbook

我认为这主要是关于iOS如何处理弃用API的问题。

我有一个支持iOS 8.3+的应用程序,它在9.3.x中运行良好,但它在iOS 10上运行。当我的应用程序允许用户选择联系人时,我得到的错误是:

  

由于未捕获的异常终止应用' CNPropertyNotFetchedException',原因:'提取联系人时未请求属性。'

我发现another post here表示不推荐使用ABAddressBook API,我应该使用CNContactPickerViewController(和相关的ContactsUI类)。我理解从弃用的课程转向新的&改进的类是推荐的解决方案。但为什么我必须这样做?

我认为在以后的版本中通常仍然支持弃用的类和方法。对我来说,我的应用程序在iOS 9.3上工作正常,然后在10.0上崩溃是没有意义的,特别是考虑到编译得很好(部署目标是" 8.3"基础SDK是&#34 ;最新(10.0)&#34 ;.)此外,一些代码仍然有效(`ABAddressBookCreateWithOptions')。

最后,有没有一种很好的方法来分析代码并突出显示所有这些使用过时的API?我的构建输出没有显示任何此类警告。

1 个答案:

答案 0 :(得分:5)

我最近自己处理了这个问题。问题与权限有关。

请务必致电ABAddressBookGetAuthorizationStatus(),如果结果为kABAuthorizationStatusNotDetermined,则必须致电ABAddressBookRequestAccessWithCompletion并使用完成处理程序。在您的应用获得许可后,才使用其他地址簿API(包括人员选择器)。

尝试使用ABPeoplePickerNavigationController允许用户选择联系人的媒体资源而不首先确保您的应用有权访问地址簿,这将导致您的问题中发布错误。