Swift:PrepareForSegue正在运行但没有加载ViewController

时间:2016-02-10 11:29:43

标签: ios xcode swift

我仍然试图在UIViewControllers中联系iOS等。我有一些荒谬的细胞问题,但这是我的错,因为它几乎没有接受任何训练而被深深抛入!

无论如何,我目前有一个prepareForSegue完美地运行每一行,然后通过UINavigationController前往目的地。但是,目标UIViewController未显示,应用程序无声地崩溃 - 根本没有错误。

有没有办法根据经验获得某种可能导致此类崩溃的原因?

已经排除了“检查segue拼写”和“不在ViewDidLoad中执行segues”之类的事情。

我觉得清单对于像我这样的新手来说是一个很好的方式来了解编码中的陷阱但是如果不可能回答或者说答案太多那么请告诉我,我会解决这个问题。

感谢。

2 个答案:

答案 0 :(得分:3)

可以通过实施协议来修复检查表。检查以下WWDC:

https://developer.apple.com/videos/play/wwdc2015-408/

此外,关于segues,还有一些事项要注意(同样适用于OSX)......

注意:

i)根据定义,segue是一个部分到另一个部分(电影中的场景或音乐中的一部分)之间的过渡。因此,他们意味着成为一个“中间人”"当涉及到查看控制器......

 i.e. ViewController1 <-- segue ->> ViewController2

ii)当您继承并覆盖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)
    }
}

如果您有预备准备工作,那么&#34;将成为&#34;查看控制器,然后在&#34;的第一部分设置它,如果&#34;我标记的声明&#39; IFYES&#39;。你可以设置动画,颜色,尺寸等等......

完成此操作后,还有另一种方法:

performSegueWithIdentifier:

我使用的一个例子是:

override func performSegueWithIdentifier(identifier: String, sender: AnyObject?) {
    if (identifier == "yourIdentifier") {
        Do something here
    } else {
        super.performSegueWithIdentifier(identifier, sender: sender)
    }
}

这是具有yourIdentifier标识符的segue实际执行的操作。即当你的viewController调用一个动作或函数时:

func someFunction(){
    self.performSegueWithIdentifier("yourIdentifier", sender: senderObjectName)
}

当然,如果您确定控制器等之间的信息......具有正确的标识符和类型......

答案 1 :(得分:0)

好的,所以在查看了类和代表中的错误的高低之后,结果发现它在Swift / XCode本身中是一个错误。

罪魁祸首就是页面上的TextView,它需要将其默认文本设置为空白才能加载页面。需要在viewDidLoad中设置任何默认文本。

完整的解决方案包含在此处 - iOS 9 Segue Causes App To Freeze (no crash or error thrown)

知道是否有任何方法可以查看在视图init期间抛出的错误日志,但在这种情况下,这一切都归结为视图中的无关紧要的元素,这仍然是一件好事。