[英]Swift: PrepareForSegue running but not loading ViewController
我仍然试图在iOS
链接UIViewControllers
等。 我有一些荒谬的细胞问题,但这对我来说是完全没有任何训练就被抛到深处的错!
无论如何,我目前有一个prepareForSegue
完美地运行每一行,然后应该通过UINavigationController
到达目的地。 但是目标UIViewController
没有显示,应用程序静默崩溃 - 根本没有错误。
有没有办法根据经验获得某种类似崩溃的潜在原因列表?
已经排除了“检查segue拼写”和“不在ViewDidLoad中执行segues”之类的事情。
我觉得清单对于像我这样的新手来说是一个很好的方法来了解编码中的陷阱,但是如果它不可能回答或者答案太多那么请告诉我,我会解决这个问题。
谢谢。
可以通过实施协议来修复检查清单。检查以下WWDC:
https://developer.apple.com/videos/play/wwdc2015-408/
此外,关于segues,有几点需要注意(同样适用于OSX)......
注意:
i)根据定义,segue是一个部分到另一个部分(电影中的场景或音乐中的一部分)之间的过渡。 因此,当涉及到查看控制器时,它们应该是一种“中间人”......
i.e. ViewController1 <-- segue ->> ViewController2
ii)当你prepareForSegue
并覆盖prepareForSegue
你告诉你的代码你想要自己处理转换。 即在UITabviewController(或NSStabViewController)中,您可以覆盖其中一些要在覆盖中实现自己的默认行为
第1部分PrepareForSegue
- 在它发生之前:
这是你实例化,配置,设置等...你的视图控制器..如果他们已经设置,那么你应该在这里超级调用。
//i.e. super.PrepareSegueForIdentifier(identifier)
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "something" {
// Do your thing here
// MARK: IFYES
} else {
prepareForSegue(segue, sender: sender)
}
}
如果你有“待定”视图控制器的预备工作,那么在我标记为“IFYES”的“if”语句的第一部分中进行设置。 你可以设置动画,颜色,尺寸等等......
完成此操作后,还有另一种方法:
performSegueWithIdentifier:
我使用的一个例子是:
override func performSegueWithIdentifier(identifier: String, sender: AnyObject?) {
if (identifier == "yourIdentifier") {
Do something here
} else {
super.performSegueWithIdentifier(identifier, sender: sender)
}
}
这是具有yourIdentifier
标识符的yourIdentifier
实际执行的操作。 即当您的viewController调用一个动作或函数时:
func someFunction(){
self.performSegueWithIdentifier("yourIdentifier", sender: senderObjectName)
}
当然,如果您确保控制器之间的segue ...具有正确的标识符和类型......
好吧,看看高级和低级的类,代表等错误后发现它是Swift / XCode本身的错误。
罪魁祸首就是页面上的TextView,它需要将其默认文本设置为空白才能加载页面。 需要在viewDidLoad中设置任何默认文本。
完整的解决方案包含在这里 - iOS 9 Segue导致应用程序冻结(没有崩溃或错误抛出)
知道是否有任何方法可以查看在视图init期间抛出的错误日志仍然是一件好事,但在这种情况下,这一切都归结为视图中的一个无关紧要的元素。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.