从 Unwind segue 触发时,Push segue 不起作用

Posted

技术标签:

【中文标题】从 Unwind segue 触发时,Push segue 不起作用【英文标题】:Push segue not working when triggered from Unwind segue 【发布时间】:2014-04-24 00:39:27 【问题描述】:

所以我有视图控制器 A,它以模态方式呈现视图控制器 C,它(假设在视图控制器 C 上完成了某些操作)展开回 A,传递一些数据,它立即通过推送将视图控制器 B 推送到其 NavController segue,从 C 传递数据。一切似乎都在工作,除了最后的推动 segue 没有发生。这是在视图控制器 A 中处理 Unwind segue 的方法。

- (IBAction)done:(UIStoryboardSegue *)segue

    NSLog(@"Called");
    GameViewController *vc = (GameViewController *)segue.sourceViewController;
    self.gameToBeShown = vc.game;
    [self performSegueWithIdentifier:@"showNewGame" sender:self];

(“showNewGame”segue 通过 Storyboard 设置为从 A 到 B 的 push segue,ctrl+从 A 的文件所有者拖动到 B。)

我可以从日志中验证是否正在调用该方法,但从未发生过转场。 unwind 回调是否太早而无法手动触发此转场?

【问题讨论】:

【参考方案1】:

是的,我认为这是一个时间问题。这是肮脏的,但它有效:

UIViewController *source = segue.sourceViewController;
[source dismissViewControllerAnimated:YES completion:^
  // FIXME: Need to trigger this segue...
  dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.25 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^
    [self performSegueWithIdentifier:@"One -> Two" sender:@"blah"];
  );
];

【讨论】:

【参考方案2】:

您可以在以下位置找到答案:unwind segue / performSegueWithIdentifier: problems

这仅在您将逻辑从 viewWillAppear: 移动到 viewDidAppear: 时才有效 这种方法的缺点是在过渡期间您会在屏幕上看到一个小故障。

【讨论】:

以上是关于从 Unwind segue 触发时,Push segue 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Swift 中 Segue Unwind 的解决方法不触发

在单元测试中以编程方式执行 Unwind Segue

保存错误时核心数据崩溃:_Unwind_Resume 从图像 CoreData 中的函数 -[NSSQLCore performChanges] 调用

Unwind segues 不适用于模态视图控制器

使用 unwind segue 从文本字段传递数据的问题

Unwind segue - 返回多个视图