Cocoa 应用程序在控制器之间传递对象

Cocoa app passing objects between controllers

我正在构建一个 Cocoa 应用程序,它由一个分为 3 个部分的窗口组成。每个部分负责自己的业务,在表格视图、弹出按钮等之间有大约 30 个控件。
我从一个控制器开始,但事情很容易变得一团糟,所以我决定将逻辑分解为 3 个控制器对象(视图的每个部分一个)。然后我在 Interface Builder 上创建了 NSObject 引用,并连接了所有的出口、动作、数据源和委托。到目前为止一切顺利。

现在,这三个部分相互传递对象,因此我需要一种方法来将对象从一个类设置到另一个类。有问题的对象是一个类变量,但由于我没有引用该对象,所以我不知道如何传递它。

有没有办法做到这一点,或者这只是整体上的错误方法?

解决方案:

正如 Sergio 在下面的评论之一中提到的,解决方案似乎是在每个控制器内创建对其他控制器的弱引用作为 IBOutlet,然后在 Xcode Interface Builder 中将控制器对象链接在一起。因此,现在每个控制器都可以访问被引用控制器的公开方法和变量。


Now, the three sections pass objects to each other and therefor I need a way to set an object from one class to another. The object in question is a class variable, but as I have no reference to the object I don't know how to pass it around.

您的设计中似乎缺少的是模型(如模型-视图-控制器中)。这将是一个封装应用程序所有状态的类,即使它是临时状态,以便每个受影响的对象都可以访问它。

这种模型类的一个简单实现是单例,因此它在您的所有控制器中都很容易使用。在这里查看有关在 Objective-C 中实现单例的一些想法。

一旦你有了你的模型类,你的控制器就可以像这样访问它,例如:

1
[MyModel sharedModel].myObject = ...;

这种方法很好,IMO,如果您朝着为您的设计创建模型的方向前进是有意义的。这取决于您的控制器共享的对象的语义。因此,可能有更适合您的情况的替代解决方案。例如,一个控制器可以是共享对象的所有者,另外两个可以在 init 上接收对第一个控制器的引用,以便他们可以访问其公共属性。