2

来自 Apple 的发行说明:

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

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

“重新启用隐私支持”是什么意思?

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

编辑:这已从 iOS 7.0.3 开始修复(可能更早)

4

1 回答 1

0

我们也遇到了山姆在我们的应用程序上遇到的同样问题。当用户尝试使用ABPeoplePickerNavigationController并进入组页面导入联系人时会发生这种情况:

  • 有时导航控制器的标题将包含 2 个名称:联系人和组
  • 然后点击 OK 按钮可能会很棘手,大多数用户会报告冻结,而只是不可能退出ABPeoplePickerNavigationController
  • 似乎允许访问 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.
}

有关更多信息,请参见此处:以编程方式请求访问联系人

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

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

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

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

问候,

于 2013-10-01T13:43:38.310 回答