我想这很大程度上是关于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/