从 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 不起作用的主要内容,如果未能解决你的问题,请参考以下文章
保存错误时核心数据崩溃:_Unwind_Resume 从图像 CoreData 中的函数 -[NSSQLCore performChanges] 调用