简体   繁体   English

iOS在ViewController之间共享数据

[英]iOS sharing data between viewcontrollers

I want to share some data (an array of custom objects) from different ViewController, when tab changed. 标签更改时,我想共享来自不同ViewController的一些数据(自定义对象的数组)。

在此处输入图片说明

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

I want to share data between: 7 to 3, 7 to 2 我想在以下之间共享数据:7到3、7到2

What is the best way to do this? 做这个的最好方式是什么?

You could do something like this: 您可以执行以下操作:

class DataSource {

    static let sharedInstance = DataSource()

    var data: [AnyObject] = []

}

Usage: 用法:

DataSource.sharedInstance.data

Another simple solution is creating a view bag to hold data to be shared between VC: 另一个简单的解决方案是创建一个视图包来保存要在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

What's the data ?A string? data什么?字符串? NSNotification is best.A few data?Save to NSUserDefaults.A lot of data?Save to file and read it. NSNotification最好。少量数据保存到NSUserDefaults中。大量数据保存到文件中并读取。 Here is example code for find vc along view controller chain: 这是沿视图控制器链查找vc的示例代码:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM