prepareForSegue 在 iOS 7 上无法获取目标视图控制器

Posted

技术标签:

【中文标题】prepareForSegue 在 iOS 7 上无法获取目标视图控制器【英文标题】:prepareForSegue can't get the destination view controller on iOS 7 【发布时间】:2015-05-08 04:55:31 【问题描述】:

我必须编写一个同时支持 ios 7 和 8 的 iOS 应用程序,在这个应用程序中,我有两个视图控制器 A 和 B,带有导航控制器和它们之间的 segue。当 segue 激活时,我必须从视图控制器 A 获取数据到视图控制器 B。我的代码在 iOS 8 上完美运行,但在 iOS 7 上却不行。

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) 
    // Get the new view controller using [segue destinationViewController].
    // Pass the selected object to the new view controller.

    if segue.identifier == userDataSegue 
        let navController = segue.destinationViewController as? UINavigationController

        if let userDataTableViewController = navController?.topViewController as? UserDataTableViewController 
            userDataTableViewController.userData = user
        
    

您知道为什么会发生这种情况吗?我该如何解决?我可以通过将内容保存在 NSUserDefaults 中并在 vc B 中读取来“解决”这个问题,但这会使我的代码变得一团糟。

感谢您的帮助:D

【问题讨论】:

userDataSegue 是什么? 这是什么转场?一个模态的?因为如果它是“常规”推送 segue,destinationviewcontroller 应该是 userdatatableviewcontroller 而不是另一个导航控制器。奇怪的是你说它适用于 ios8... @AndreSlotta 另一个视图控制器是一个嵌入了导航控制器的常规视图控制器。它确实适用于 iOS 8。 @rodrigoalves 但它是什么样的转场?模态的?推? 好的。在这种情况下,您应该直接转到 userDataTableViewController 而不是嵌入到 NavigationController 中... 【参考方案1】:

不要忘记在 Second ViewController 中创建一个公共属性 userData。

override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) 

if (segue.identifier == "segueTest") 
var svc = segue!.destinationViewController as secondViewController;

svc.userData = user



【讨论】:

以上是关于prepareForSegue 在 iOS 7 上无法获取目标视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

prepareForSegue 更新到 iOS9 后冻结

使用导航控制器在“prepareForSegue”中设置数据

在 prepareForSegue 上为 Popover Segue 传递数据:iOS 5 中的奇怪行为

iOS >> prepareForSegue >> IBOutlet 更新不起作用?

PrepareForSegue 方法使应用程序 iOS 崩溃

iOS App 在 segue 崩溃(断点发生在 func prepareForSegue)