跨多个控制器更新对象/模型

Posted

技术标签:

【中文标题】跨多个控制器更新对象/模型【英文标题】:Updating objects/model across multiple controllers 【发布时间】:2018-06-09 19:32:53 【问题描述】:

我是 swift 的初学者。所以在我的项目中,我使用了多个对象/模型,几乎在所有控制器中都使用过。我的问题是,当我的对象/模型在任何一个控制器中更新时,如何自动更新我的对象/模型(跨所有控制器)?

执行此操作的正确方法是什么?我该怎么做??

【问题讨论】:

你应该在控制器中为你的对象添加观察者,并实现方法更新你的 viewController UI 如果在任何地方都使用相同的模型,为什么不使用该模型的单个对象。这样,无论您在哪里修改它,都可以在所有控制器中获得更改。仅当您确定要求时才这样做,因为这可能会导致无法追踪的错误.. 你能更新一些代码吗?比如你如何创建模型,使用你的模型对象和更新模型? 【参考方案1】:

Pass By Value & Pass By Reference的概念。

最适合您的问题的解决方案是使用Pass By Reference 类型。

如果我们谈论Swift programming language

class 是引用类型,struct 是值类型。

因此,您的模型类应该使用class 类型构建。

代码示例。

class Dog 
    var breed : String = ""
    var sub_breed = [String]()
    init(_breed:String,_sub_breed:[String]) 
        self.breed = _breed
        self.sub_breed = _sub_breed
    


FirstViewController:

var dogs : [Dog] = [Dog(_breed: “Original”, _sub_breed: [“subBreedType1”, “subBreedType2”])]

SecondViewController: // You are passing reference of dogs to SecondVC

var dogs : [Dog] = []

dogs[0].breed = “Modified”

现在您已将breed name 的值从SecondViewController 更改,如果您返回FirstViewController 并检查数组的first element,则该值将是“Modified”

你可以试试这个想法。

其他解决方案:您的Model class 中的Singleton object

谢谢。

【讨论】:

以上是关于跨多个控制器更新对象/模型的主要内容,如果未能解决你的问题,请参考以下文章

在 Swift 中跨多个选项卡访问相同的视图模型

- 更新 - Rails API 应用程序使用来自控制器的 POST 请求一次创建不同模型的多个嵌套记录

跨多个服务器管理配置文件

asp.net mvc - 控制器共享对象的最佳方式是啥

我需要多个上下文来更新独立对象吗?

Rails:如何跨视图访问模型和控制器数据?