如何在多个(在我的设置 3 中)ViewController 之间传递数据?
How to pass data between multiple (in my setup 3) ViewControllers?
我想制作一个抽认卡应用程序,其行为是在 CoursesVC
上,用户可以添加课程并单击它们。然后他得到带有抽认卡的列表。他可以在那里添加更多的抽认卡。存储由 CoreData
管理。当它单击单元格时,我将数据传递给带有 prepareForSegue
的抽认卡列表。要添加抽认卡,我有同样的想法,但这是不可能的,因为在创建 prepareForSegue
时,第二个视图控制器的变量没有初始化。问题:如何以适当的方式将 NSManagedObject
从第一个 ViewController
传递到第三个 ViewController
? (丑陋的方法是在创建 prepareForSegue 之前让视图呈现)
与 "how to pass data between ViewControllers" 等问题的区别在于我有三个 ViewController。在第一个和第二个视图控制器中使用 prepareForSegue 是行不通的,因为当创建 prepareForSegue 时,第二个 VC 中的变量还没有定义,因为视图还没有初始化!请记住,从第二个到第三个视图控制器的 segue 是 "Present Modally" as "Page Sheet"!
这基本上是解决方案:
问题是第三个视图控制器是作为导航控制器嵌入的。这就是 prepareForSegue
不同的原因。
解决方案是在第二个中使用以下 prepareForSegue VC:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let navigationVC = segue.destination as? UINavigationController, let myViewController = navigationVC.topViewController as? DViewController {
myViewController.currentCourse = self.currentCourse
}
}
我想制作一个抽认卡应用程序,其行为是在 CoursesVC
上,用户可以添加课程并单击它们。然后他得到带有抽认卡的列表。他可以在那里添加更多的抽认卡。存储由 CoreData
管理。当它单击单元格时,我将数据传递给带有 prepareForSegue
的抽认卡列表。要添加抽认卡,我有同样的想法,但这是不可能的,因为在创建 prepareForSegue
时,第二个视图控制器的变量没有初始化。问题:如何以适当的方式将 NSManagedObject
从第一个 ViewController
传递到第三个 ViewController
? (丑陋的方法是在创建 prepareForSegue 之前让视图呈现)
与 "how to pass data between ViewControllers" 等问题的区别在于我有三个 ViewController。在第一个和第二个视图控制器中使用 prepareForSegue 是行不通的,因为当创建 prepareForSegue 时,第二个 VC 中的变量还没有定义,因为视图还没有初始化!请记住,从第二个到第三个视图控制器的 segue 是 "Present Modally" as "Page Sheet"!
这基本上是解决方案:
问题是第三个视图控制器是作为导航控制器嵌入的。这就是 prepareForSegue
不同的原因。
解决方案是在第二个中使用以下 prepareForSegue VC:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let navigationVC = segue.destination as? UINavigationController, let myViewController = navigationVC.topViewController as? DViewController {
myViewController.currentCourse = self.currentCourse
}
}