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”中设置数据
在 prepareForSegue 上为 Popover Segue 传递数据:iOS 5 中的奇怪行为
iOS >> prepareForSegue >> IBOutlet 更新不起作用?