使用 ABPeoplePickerNavigationController 后展开 segue 崩溃

Posted

技术标签:

【中文标题】使用 ABPeoplePickerNavigationController 后展开 segue 崩溃【英文标题】:Unwind segue crashes after ABPeoplePickerNavigationController use 【发布时间】:2014-02-22 01:59:40 【问题描述】:

我有一个模态呈现的视图(称之为“当前视图”)。它对前面的模态呈现的视图有一个展开的转义。当前视图有一个连接到以下代码的按钮:

- (IBAction)inviteUser:(id)sender

    ABPeoplePickerNavigationController *picker = [[ABPeoplePickerNavigationController alloc] init];
    picker.peoplePickerDelegate = self;
    [self presentViewController:picker animated:NO completion:nil];

当前视图设置为选取器的委托,并实现以下委托方法:

- (void)peoplePickerNavigationControllerDidCancel:(ABPeoplePickerNavigationController *)peoplePicker

    // Do nothing
    [self dismissViewControllerAnimated:NO completion:nil];



- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person

    [self dismissViewControllerAnimated:NO completion:nil];
    return NO;


- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker
      shouldContinueAfterSelectingPerson:(ABRecordRef)person
                                property:(ABPropertyID)property
                              identifier:(ABMultiValueIdentifier)identifier

    return NO;

到目前为止还没有什么疯狂的。当我按下按钮时,我的联系人列表就会出现。我可以选择一个联系人,然后我会返回到当前视图,没有崩溃,也没有明显的变化。

现在,当前视图有另一个按钮(后退按钮)连接到我在情节提要中创建的展开转场。我通过 ctrl 从按钮拖动到“退出”并选择我在上一个视图中定义的展开函数来做到这一点:

- (IBAction)unwindToThisList:(UIStoryboardSegue*)unwindSegue



这是关键。如果我在当前视图中按下后退按钮,并且在此视图中没有进入地址簿,它会正确展开。没问题。我可以整天在这些视图之间来回穿梭。但是,如果我已经进入地址簿并返回到当前视图,按下后退按钮会导致 EXEC_BAD_ACCESS。如果我通过选择联系人或按取消离开通讯录,这没有任何区别。

我完全迷路了。请停下来。

【问题讨论】:

另外,模拟器上也没有出现这个问题。 有时我会在调试器中收到以下错误:“无法识别的选择器 ... [__NSCFString barStyle]”和“在事务中调用的 [CATransaction 同步]”。其他时候,我可以成功放松一次,但不能第二次。 前一个视图确实有一个 UINavigationBar,但它没有以编程方式引用。上面有按钮。 【参考方案1】:

我创建了一个测试 xcode 项目,在导航中有两个场景, 从第一个视图推送当前视图(第二个场景)。

然后在当前视图中实现了inviteUser 方法,在解除ABPeoplePickerNavigationController 之后,我将segue 展开到第一个视图,没有出现错误。请检查可能还有其他错误,我猜。

【讨论】:

我的不在导航中。它们都是模态的。但这是一个可靠的想法。我将尝试在准系统环境中重新创建视图流。 伙计,推动场景并展开它仅在导航中有效。 这不是真的。您可以从模态转场中放松。

以上是关于使用 ABPeoplePickerNavigationController 后展开 segue 崩溃的主要内容,如果未能解决你的问题,请参考以下文章

第一篇 用于测试使用

在使用加载数据流步骤的猪中,使用(使用 PigStorage)和不使用它有啥区别?

今目标使用教程 今目标任务使用篇

Qt静态编译时使用OpenSSL有三种方式(不使用,动态使用,静态使用,默认是动态使用)

MySQL db 在按日期排序时使用“使用位置;使用临时;使用文件排序”

使用“使用严格”作为“使用强”的备份