Segue不起作用,我无法弄清楚原因

时间:2016-10-10 21:10:21

标签: ios segue swift3 xcode8

我在视图的ViewDidLoad方法中有一个if ... then语句,作为我的故事板入口点。

基本上,我正在检查核心数据中是否有任何数据,以表明他们已经完成了一个小的“设置表单”。

如果发现核心数据为空或者应用程序未正确设置,我希望它自动将它们转移到带有segue的设置视图。

我的ViewDidLoad方法如下所示:

override func viewDidLoad() {
    super.viewDidLoad()

    //Get any entries from the App Settings Entity
    getAppSettings()


    //If any entries are found, check to see if the setup has been completed
    if (appSettings.count > 0) {

        print("We found entries in the database for App Settings")

        if (appSettings[0].setupComplete == false) {
            print("Setup has not been completed")
            self.performSegue(withIdentifier: "toAppSettings", sender: self)
        } else {
            print("Setup is completed")
            //Load the settings into global variables
            preferredRegion = appSettings[0].region!
            usersName = appSettings[0].usersName!
        }

    } else { 
        print("We found no entries in the database for App Settings")
        self.performSegue(withIdentifier: "toAppSettings", sender: self)
    }
}

我确保segue确实存在,并且segue的标识符与我在引号中的标识符完全相同(我甚至复制并粘贴了它的所有实例以确保它们都是一致的)。 / p>

我还加倍努力,在“准备segue”方法中加入了一个检查器,打印出是否被调用,以及发件人是谁:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    print("We're getting ready to segue!")
    print(segue.identifier)
}

这两个项目都打印到日志中,告诉我正在识别segue并且应用程序正在尝试触发它。但是 - 由于某种原因,我无法弄明白 - 它根本就没有解雇。

我在这里缺少什么想法?

1 个答案:

答案 0 :(得分:2)

  

我在ViewDidLoad中有一个if ... then语句

但这就是问题所在。 viewDidLoad对此尚不清楚。请记住,所有viewDidLoad意味着视图控制器都有视图。这就是它的意思。该视图尚未出现在界面中,视图控制器本身甚至可能不在视图层次结构中!它只是坐在物体空间里。你不能离开这里;没有什么可以贬低的。

请等到viewDidAppear。如果这有效,您可以尝试将其移回viewWillAppear,但我不保证任何事情。请记住,这些方法可以多次调用,因此您可能还需要一个标记来确保此segue只触发一次。