- 当我的标签栏控制器负载的第一页,我检索阵列中的一个JSON文件
- 我保存它的数据(在第一个视图控制器)
- 获得的数据将显示在第二个视图控制器中。数据已经加载并存储在第一个视图控制器的数组中。
问题:
我不能找出一个的方式来传递这两个视图控制器之间的数据。由于它是一个标签栏控制器,因此无法传递基于segue标识符的数据。
请帮忙!
问题:
我不能找出一个的方式来传递这两个视图控制器之间的数据。由于它是一个标签栏控制器,因此无法传递基于segue标识符的数据。
请帮忙!
您可以将数据存储在AppDelegate上。从多个视图控制器访问会很容易。 但是,如果你需要通过视图控制器之间的数据则:
var secondTab = self.tabBarController?.viewControllers[1] as SecondViewController
secondTab.array = firstArray
它说[AnyObject]没有一个名为下标 – 0to1000
的成员它在哪里说的?你能发布你的代码吗? –
H. Serdar的代码示例是正确的,这是访问另一个选项卡的视图控制器并为其提供数据的方式。
请记住,当您在Swift中传递数组时,you're passing it by value与Objective-C不同,后者通过引用传递它。这意味着由第二个视图控制器所做的更改不会反映在您的第一个视图控制器中,因为您的第二个视图控制器正在使用数组的副本,而不是同一个数组。如果您希望这两个视图控制器都修改相同的数组,请将该数组放在一个类中,然后传递该类的单个实例。
其他一些注意事项: 你可以继承的TabBarController给它那将存储数据的属性,这将使用可用于所有选项卡:
if let tbc = tabBarController as? YourCustomTabBarSubclass {
println("here's my data \(tbc.array)")
}
在这种情况下,你会从多个选项卡访问相同的数组,所以一个选项卡中的更改将反映在其他地方。
我建议不要将您的App Delegate用作集中存储数据的方法。这不是应用程序委托的目的。其目的是处理应用程序对象的委托调用。
视图控制器应该拥有所有需要完成工作的数据。它们与模型数据(例如数组或数据库引用或托管对象上下文)有连接关系,而不是通过遍历视图控制器图或者进入委托或者甚至将视图控制器伸出到另一个对象使用全局变量。 View Controller的这种模块化自包含结构允许您在不同设备上重构类似但独特设计的应用,例如在一个设备(如iPad)的弹出窗口中呈现视图控制器,并将其全屏显示在另一设备上,例如一个iPhone。
SWIFT 3
在第一个的ViewController,声明你的变量(在你的情况下数组)像通常那样。
在你的第二个视图控制器,这样做:
var yourVariable: YourVariableClass {
get {
return (self.tabBarController!.viewControllers![0] as! FirstViewControllerClass).yourVariable
}
set {
(self.tabBarController!.viewControllers![0] as! FirstViewControllerClass).yourVariable = newValue
}
}
这样做是因为,在tabbarcontroller标签项后面的所有viewcontrollers被初始化。通过在第二个视图控制器中执行此操作,您实际上是从第一个视图控制器中/从/设置变量。
这应该是正确的答案! –
我最终在上面的回答中使用了Woodster的建议。
在斯威夫特3
创建一个新的快捷文件,并创建一个类:
class Items {
static let sharedInstance = Items()
var array = [String]()
}
在任何您的视图控制器,你可以访问阵列,像这样:
Items.sharedInstance.array.append("New String")
print(Items.sharedInstance.array)
发现这个问题后,讨论了1/2次 - 在堆栈和其他地方讨论,以及为解决问题的方法提供了许多不同的答案 - **这是问题/要求的最清晰和简洁的答案/解决方案** 。这是一个很好的清洁架构,与模型视图展示器等设计模式一致。如果我能够在人们询问如何做到这一点时帮助专注交通,我想要5次投票答复。非常感谢分享对我来说像最佳做法..又名,正确的方法 - 解决这个要求 – gnB
我很高兴我可以帮助:)更多信息在这里。 https://krakendev.io/blog/the-right-way-to-write-a-singleton – Jeff
更新:使用单身人士有很多争议。被告知。 – Jeff
[例使用unwind segue](https://stackoverflow.com/a/47751962/3681880)。如果您从一个选项卡的后代导航到另一个选项卡的根目录,这仅仅是有用的。 – Suragch