我试图通过'准备segue'将数据从一个View Controller传递到Swift中的另一个,但它崩溃了

时间:2017-02-10 22:23:23

标签: ios iphone swift

晚上好,

我正在尝试将数据从一个View Controller传递到另一个View Controller,但它会在最终的View Controller中崩溃我的程序。任何人都可以帮助我吗?

这是ViewController:

add_action('delete_attachment', 'DontDeleteMedia', 11, 1);
function DontDeleteMedia($postID)
{
    if (!current_user_can('manage_options')) {
        exit('You cannot delete media.');
    }
}

这是PopUpViewController:

func updateAfterPlayAgain(){
    labelSay.text = ">Result<"

    scoreLabel.text = "Score: 0"

    score = 0

    seconds = 10

    mainButton.isEnabled = true

    userResult.isUserInteractionEnabled = true
}

当我(PopUpViewController)关闭时,我正试图从ViewController访问数据。我想在关闭PopUpViewController时更新ViewController中的信息。

谢谢。

2 个答案:

答案 0 :(得分:2)

当调用prepareForSegue时,目标视图控制器的视图尚未加载,因此它的所有插座都将为零。

将插座设置为隐式展开的选项,如果您尝试引用的插座为零,则会导致崩溃。这就是你崩溃的原因。

您不应该从prepareForSegue中调用updateAfterPlayAgain(),因为它会在连接之前尝试引用您的商店。而是从updateAfterPlayAgain()(或更好地从viewWillAppear调用viewDidLoad,因为只有在首次加载视图控制器的视图时才会调用一次。)

答案 1 :(得分:0)

@Banjo,你的问题并不完全清楚。请自行添加崩溃,以便我们提供更多信息帮助您。

从我看到的,当你创建一个屏幕时,@IBOutlet标签仍然是零,直到屏幕执行&#34; viewDidLoad&#34;因此,方法,而不是更新准备中的屏幕(对于segue),我使用布尔值设置一个标志,即:&#34; requiresUpdate:Bool&#34;,并在此处设置,然后在viewDidAppear,检查标志并调用updateAferPlayAgain。

如果您正在谈论解雇控制器并更新主控制器,您应该阅读有关如何使用&#34;展开segues&#34;并且处理它们的事件时,父控制器以这种方式获得所显示的控制器关闭的事件。

本文应该对您有所帮助: https://spin.atomicobject.com/2014/10/25/ios-unwind-segues/

祝你好运。