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

Cocoa应用程序在控制器之间传递对象,cocoa,Cocoa,我正在构建一个Cocoa应用程序,它由一个分为3个部分的窗口组成。每个部分负责自己的业务,在表视图、弹出按钮等之间有大约30个控件。 我从一个控制器开始,但事情很容易变得混乱,所以我决定在3个控制器对象中分解逻辑(视图的每个部分一个)。然后,我在Interface Builder上创建了NSObject引用,并连接了所有出口、操作、数据源和委托。到目前为止还不错 现在,这三个部分相互传递对象,因此我需要一种方法将对象从一个类设置为另一个类。所讨论的对象是一个类变量,但由于我没有对该对象的引用,我

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

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

有没有办法做到这一点,或者这只是一种错误的方法

解决方案:

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

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

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

这种模型类的一个简单实现是单例,因此它在所有控制器中都是现成的。对Objective-C中的单例实现有一些想法

拥有模型类后,控制器可以这样访问它,例如:

[MyModel sharedModel].myObject = ...;

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

我有一个模型,它实际上是一个单例,但正是nib文件保存了对这两个控制器的引用,因此我不知道如何实例化(或参考)它们在模型中。我想这是我缺少的部分。如果我能在某个地方挂起两个控制器,那么我可以轻松地在彼此之间设置一些代理来传递这些对象。知道吗?不应该是引用模型的两个控制器吗?关于nib的事情,为您的nib所有者和conn定义两个插座怎么样将它们连接到IB中的2控制器?就是这样。这就像一个魅力。你想把它升级为一个答案,让我接受它吗。是的,一个完整的MVC总是可以成为另一个MVC中的“视图”。