为什么已弃用的 ABAddressBook API 会崩溃 iOS 10?
Why do the deprecated ABAddressBook APIs crash iOS 10?
我想这主要是关于 iOS 如何处理弃用 API 的问题。
我有一个支持 iOS 8.3+ 的应用程序,它在 9.3.x 之前运行良好,但它在 iOS 10 上中断。当我的应用程序让用户选择时联系人,我得到的错误是:
Terminating app due to uncaught exception 'CNPropertyNotFetchedException', reason: 'A property was not requested when contact was fetched.'
我发现 说 ABAddressBook API 已被弃用,我应该改用 CNContactPickerViewController(和相关的 ContactsUI 类)。我理解的答案是,从弃用的 类 转向新的和改进的 类 是推荐的解决方案。但是为什么我必须这样做?
我认为已弃用的 类 和方法通常在更高版本中仍受支持。我的应用程序在 iOS 9.3 上运行良好,然后在 10.0 上崩溃,这对我来说毫无意义,特别是考虑到它编译得很好(部署目标是“8.3”,基本 SDK 是 "Latest (10.0)" .) 此外,一些代码仍然有效(`ABAddressBookCreateWithOptions')。
最后,是否有一种好的方法来分析代码并突出显示所有此类已弃用 API 的使用?我的构建输出没有显示任何此类警告。
我最近自己处理了这个问题。问题与权限有关。
确保调用 ABAddressBookGetAuthorizationStatus()
,如果结果为 kABAuthorizationStatusNotDetermined
,则必须调用 ABAddressBookRequestAccessWithCompletion
并使用完成处理程序。只有在您的应用获得许可后才能使用其他地址簿 API(包括人员选择器)。
尝试使用 ABPeoplePickerNavigationController
允许用户 select 联系人的 属性 而不首先确保您的应用程序有权访问地址簿将导致错误张贴在您的问题。
我想这主要是关于 iOS 如何处理弃用 API 的问题。
我有一个支持 iOS 8.3+ 的应用程序,它在 9.3.x 之前运行良好,但它在 iOS 10 上中断。当我的应用程序让用户选择时联系人,我得到的错误是:
Terminating app due to uncaught exception 'CNPropertyNotFetchedException', reason: 'A property was not requested when contact was fetched.'
我发现
我认为已弃用的 类 和方法通常在更高版本中仍受支持。我的应用程序在 iOS 9.3 上运行良好,然后在 10.0 上崩溃,这对我来说毫无意义,特别是考虑到它编译得很好(部署目标是“8.3”,基本 SDK 是 "Latest (10.0)" .) 此外,一些代码仍然有效(`ABAddressBookCreateWithOptions')。
最后,是否有一种好的方法来分析代码并突出显示所有此类已弃用 API 的使用?我的构建输出没有显示任何此类警告。
我最近自己处理了这个问题。问题与权限有关。
确保调用 ABAddressBookGetAuthorizationStatus()
,如果结果为 kABAuthorizationStatusNotDetermined
,则必须调用 ABAddressBookRequestAccessWithCompletion
并使用完成处理程序。只有在您的应用获得许可后才能使用其他地址簿 API(包括人员选择器)。
尝试使用 ABPeoplePickerNavigationController
允许用户 select 联系人的 属性 而不首先确保您的应用程序有权访问地址簿将导致错误张贴在您的问题。