AddressBookUI视图控制器在iOS 7中的行为与预期不符

AddressBookUI视图控制器在iOS 7中的行为与预期不符,ios,ios7,addressbookui,Ios,Ios7,Addressbookui,从苹果的发行说明中: 从Seed 4开始,针对iOS 7 SDK链接的应用程序重新启用了对AddressBookUI框架的隐私支持。与旧SDK链接的应用不会更改。如果您的应用程序使用任何通讯簿视图控制器,您应该验证它是否仍按预期运行 问题是,如果视图控制器的行为仍不符合预期,该怎么办 重新启用“隐私支持”意味着什么 我遇到这种情况是因为我们的应用程序无法再从ABPeoplePickerNavigationController组访问Microsoft Exchange ActiveSync全局地址

从苹果的发行说明中:

从Seed 4开始,针对iOS 7 SDK链接的应用程序重新启用了对
AddressBookUI
框架的隐私支持。与旧SDK链接的应用不会更改。如果您的应用程序使用任何通讯簿视图控制器,您应该验证它是否仍按预期运行

问题是,如果视图控制器的行为仍不符合预期,该怎么办

重新启用“隐私支持”意味着什么

我遇到这种情况是因为我们的应用程序无法再从
ABPeoplePickerNavigationController
组访问Microsoft Exchange ActiveSync全局地址列表。所以不,它的行为并不像预期的那样(它在iOS 6中的行为)


编辑:从iOS 7.0.3(可能更早)开始,这一问题已得到修复。我们的应用程序中也存在Sam的问题。 当用户试图使用
ABPeoplePickerNavigationController
导入联系人并进入“组”页面时,会发生这种情况:

  • 有时导航控制器的标题将包含两个名称:联系人和组
  • 点击OK按钮可能会很棘手,大多数用户会报告冻结,而退出PeoplePickernavigationController则是不可能的
  • 似乎允许访问Exchange全局地址列表,但不显示任何数据,只显示一个空的tableView
在Sam的重点介绍之后,我们考虑明确请求用户访问其通讯簿的权限。 由于iOS 6引入了此功能,我们没有将其用于导入联系人,因为
ABPeoplePickerNavigationController
本身正在处理此功能

无论如何,我们一直在使用:

ABAddressBookRef addressBook = ABAddressBookCreate();

__block BOOL accessGranted = NO;
if (ABAddressBookRequestAccessWithCompletion != NULL) { // we're on iOS 6
    dispatch_semaphore_t sema = dispatch_semaphore_create(0);
    ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) {
    accessGranted = granted;
    dispatch_semaphore_signal(sema);
});
dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);
dispatch_release(sema);   
}
else { // we're on iOS 5 or older
    accessGranted = YES;
}

if (accessGranted) {
    // Do whatever you want here.
}
有关更多信息,请参见此处:

这并不能解决问题,因为已正确授予访问权限

我们在设置/常规/重置/重置位置和隐私中重置了隐私设置

按预期正确请求访问用户的联系人列表,但上述行为仍然相同

如果有人能解释如何解决这个问题,那就太好了


关于苹果开发论坛,显然是一个bug:

。我们安装了雷达。山姆,你能再加上一个吗?向苹果提交了错误报告并提交了