1

升级到 iOS9 后,我刚刚注意到我的应用程序出现了不同的行为。我有一个显示手机设备联系人的视图。

我的代码如下:

if (... == YES)
    {
        ABRecordSetValue(aContact, kABPersonEmailProperty, email, &anError);
        if (anError == NULL)
        {
            ABUnknownPersonViewController *picker = [[ABUnknownPersonViewController alloc] init];
            picker.unknownPersonViewDelegate = self;
            picker.displayedPerson = aContact;
            picker.allowsAddingToAddressBook = YES;
            picker.allowsActions = YES;
            picker.alternateName = @"John Appleseed";
            picker.title = @"John Appleseed";
            picker.message = @"Company, Inc";

            [self.navigationController pushViewController:picker animated:YES];
        }

然后我使用委托做出一些决定

- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person 
                                property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier
    {
        //make decisions 
        return YES or NO;
    }

用户点击电话号码。

在 IOS8 >> 代码到达 shouldContinueAfterSelectingPerson 然后出现本机拨号器

在 IOS9 >> 本地拨号器出现在代码到达 shouldContinueAfterSelectingPerson 之前。

有什么办法解决吗?

4

1 回答 1

2

我面临同样的问题。我注意到的是,如果您在委托方法中进行某些计算(显然需要一些时间来进行计算)并且本机拨号程序被调用。

所以,为了避免这个问题,我立即从这个委托方法返回 NO 并在不同的线程中执行我的计算。这当然是一种解决方法,希望在 iOS 的下一个版本中解决此问题。

于 2015-10-07T17:09:23.660 回答