2013-01-08 61 views
3

我正在构建一个Cocoa应用程序,该应用程序由一个分为3个部分的窗口组成。每个部门都负责自己的业务,并且在桌面视图,弹出按钮等之间有大约30个控件。我从一个控制器开始,但事情变得非常容易,所以我决定在3控制器对象(视图的每个部分)。然后我在Interface Builder上创建了NSObject参考,并连接了所有的出口,动作,数据源和代表。到现在为止还挺好。可可应用程序在控制器之间传递对象

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

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

解决方案:

如塞尔吉奥评价之一如下所述,溶液似乎是创建每个控制器作为IBOutlet中内,然后在Xcode界面生成器链接弱引用到另一控制器控制器对象一起。因此,现在每个控制器都可以访问参考控制器的公开方法和变量。

+0

是的,一个完整的MVC可以永远是另一个MVC中的“视图”。 –

回答

2

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

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

这样一个模型类的一个简单的实现是单例,所以它可以在所有的控制器中使用。有一个look here关于在Objective-C中实现单例的一些想法。

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

[MyModel sharedModel].myObject = ...; 

这种做法是很好的,海事组织,如果它是有道理的,你在创建模型的方向走为您的设计。这取决于您的控制器共享的对象的语义。所以,可能有更好的替代解决方案适合你的情况。例如,一个控制器可以是共享对象的所有者,另外两个控制器可以在初始化时接收对第一个控制器的引用,以便他们可以访问其公共属性。

+0

我有一个模型,实际上是一个单身人士,但它是持有对2个控制器的引用的nib文件,所以我不知道如何在模型中实例化(或引用)它们。我猜是我缺少的部分。如果我可以在2个控制器上挂起一个地方,那么我可以轻松地设置一个代表彼此之间的代理来传递这些对象。任何想法? – cescofry

+1

不应该是引用模型的两个控制器?关于笔尖的事情,那么为您的笔尖所有者定义两个插座并将它们连接到IB的2控制器上呢? – sergio

+0

它就在那里。这工作像一个魅力。你想把它作为答案来加以处理,这样我就可以接受它。 – cescofry

相关问题