我在视图的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并且应用程序正在尝试触发它。但是 - 由于某种原因,我无法弄明白 - 它根本就没有解雇。
我在这里缺少什么想法?
答案 0 :(得分:2)
我在ViewDidLoad中有一个if ... then语句
但这就是问题所在。 viewDidLoad
对此尚不清楚。请记住,所有viewDidLoad
意味着视图控制器都有视图。这就是它的意思。该视图尚未出现在界面中,视图控制器本身甚至可能不在视图层次结构中!它只是坐在物体空间里。你不能离开这里;没有什么可以贬低的。
请等到viewDidAppear
。如果这有效,您可以尝试将其移回viewWillAppear
,但我不保证任何事情。请记住,这些方法可以多次调用,因此您可能还需要一个标记来确保此segue只触发一次。