在使用ABPeoplePickerNavigationController时,当用户选择一个人,然后didSelecPerson自行关闭时,将调用ABPeoplePickerNavigationController委托。接收didSelectPerson调用时,我需要提供另一个视图控制器。问题是ABPeoplePickerNavigationController的动画在此阶段关闭还没有完成。因此,下一个视图控制器的呈现将产生一个错误。

如果我将ABPeoplePickerNavigationController子类化并覆盖:

-(void)dismissViewControllerAnimated:(BOOL)flag completion:(void (^)(void))completion
{
    NSLog(@"%s", __PRETTY_FUNCTION__);
    [super dismissViewControllerAnimated:flag completion:completion];

    [self.myDelegate didDismissPickerCompletion];
}

这样可以解决问题。但是苹果文档确实声明“ABPeoplePickerNavigationController类不支持子类化”。这是否意味着他们将拒绝任何试图将此类分类为子类的尝试?

注意:我不希望使用任何人为的时间延迟作为解决方案。

最佳答案

然后ABPeoplePickerNavigationController关闭自身

有你的问题。它只是因为您没有将其关闭而将其关闭。明确将其自己关闭!在您的dismissViewControllerAnimated:completion:实现中直接在此处调用didSelectPerson:

现在您有了完成处理程序,因此您可以在解雇完成后运行代码。

关于ios - ABPeoplePickerNavigationController类不支持子类化,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30354402/

10-12 04:23
查看更多