2016-04-08 87 views
2

当选项卡更改时,我想共享来自不同ViewController的一些数据(自定义对象数组) 。iOS在视图控制器之间共享数据

enter image description here

1 = TabController
2 = ViewController
3 = ViewController
4 = SplitViewController
5 = MapView
6 = ViewController
7 = TableViewController

我想共享数据: 7到3,7到2

这样做的最佳方法是什么?

回答

2

你可以做这样的事情:

class DataSource { 

    static let sharedInstance = DataSource() 

    var data: [AnyObject] = [] 

} 

用法:

DataSource.sharedInstance.data 
+0

我已经试过这个,但如果我改变标签从7的数据丢失 – Flo

+1

你确定你尝试过'sharedInstance'吗? – Laffen

0

什么是data?一串? NSNotification是最好的。一些数据?保存到NSUserDefaults.A很多数据?保存到文件并阅读它。 这里是沿视图控制器链中发现的VC例子代码:

let vc7 = UIViewController() 
let tabBarVC = vc7.splitViewController?.tabBarController 
let vc2 = tabBarVC?.viewControllers?[1] 
let vc3 = tabBarVC?.viewControllers?[2] 
+1

这对于扔掉一些漂亮的关键字毫无帮助。此外,从来不是一个好主意,解决这种用例的NSUserDefaults – glace

+0

你也可以沿视图控制器链获得3/2。首先,获取分割vc.Second,获取标签栏vc.Last,获取2/3 in标签栏vc的'viewControllers'。 – Lumialxk

+0

一组自定义对象 – Flo

1

另一种简单的解决方案是创建一个视图包含要共享的数据VC:

import Foundation 

class ViewBag 
{ 
    internal static var internalDictionary = Dictionary<String, AnyObject>() 

    class func get(key: String) -> AnyObject? 
    { 
     return internalDictionary[key] 
    } 

    class func add(key: String, data: AnyObject) 
    { 
     internalDictionary[key] = data 
    } 
} 

class MyClass 
{ 

} 

// Example 

let myClassArray = [MyClass(),MyClass(),MyClass(),MyClass()] 

ViewBag.add("myKey", data: myClassArray) 

ViewBag.get("myKey")?.count // You must do a proper casting here 
相关问题