ios - 为什么不推荐使用的ABAddressBook API使iOS 10崩溃?

标签 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为“最新(10.0)”)。 ,某些代码仍然有效(`ABAddressBookCreateWithOptions')。

最后,是否有一种很好的方法来分析代码并突出显示所有不建议使用的API?我的构建输出未显示任何此类警告。

最佳答案

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

确保调用ABAddressBookGetAuthorizationStatus(),如果结果为kABAuthorizationStatusNotDetermined,则必须调用ABAddressBookRequestAccessWithCompletion并使用完成处理程序。仅在授予您的应用权限后,才能使用其他地址簿API(包括人员选择器)。

尝试使用ABPeoplePickerNavigationController允许用户选择联系人的属性而没有先确保您的应用有权访问通讯簿,这将导致在问题中发布错误。

关于ios - 为什么不推荐使用的ABAddressBook API使iOS 10崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39812649/

相关文章:

objective-c - iOS 6 地址簿不工作?

ios - 如何让地址簿权限弹出窗口显示在顶部?

ios - 您可以将状态存储在自定义 UICollectionViewCell 中吗?或者状态是否可以被删除(比如当单元格滚出屏幕时)?

ios - 通过 PFInstallation 订阅 channel 时遇到问题

ios - 如何从 AddressBook 中获取联系人并将其存储在 iOS 7 中的数组中?

ios - 如何在地址簿中添加地址属性?

objective-c - 获取地址簿的子数组

ios - 如何允许用户在页面的任意位置添加文本? ( swift )

iOS Animate UIPicker 高度变化

iphone - Info.plist文件 "no such file"错误