我正在构建一个Cocoa应用程序,它由一个分为3个部分的窗口组成。每个部分负责自己的业务,表视图,弹出按钮等之间有大约30个控件 我从单个控制器开始,但事情很容易变得混乱,所以我决定在3个控制器对象(视图的每个部分)中打破逻辑。然后,我在Interface Builder上创建了NSObject引用,并连接了所有出口,操作,数据源和委托。到目前为止一切都很好。
现在,这三个部分将对象相互传递,因此我需要一种方法将对象从一个类设置为另一个类。有问题的对象是一个类变量,但由于我没有引用该对象,所以我不知道如何传递它。
有没有办法做到这一点,或者这只是错误的做法?
解决方案:
正如Sergio在其中一条评论中提到的那样,解决方案似乎是创建一个对每个控制器内其他控制器的弱引用作为IBOutlet,然后在Xcode Interface Builder中将控制器对象链接在一起。因此,现在每个控制器都可以访问所引用控制器的公开方法和变量。
答案 0 :(得分:2)
现在,这三个部分将对象相互传递,因此我需要一种方法将对象从一个类设置为另一个类。有问题的对象是一个类变量,但由于我没有引用该对象,所以我不知道如何传递它。
您的设计中似乎缺少的是模型(如Model-View-Controller中所示)。这将是一个封装应用程序所有状态的类,即使它是暂时状态,因此每个受影响的对象都可以访问它。
这种模型类的一个简单实现是单例,因此它可以在所有控制器中随时使用。考虑到Objective-C中单例的实现,请考虑look here。
拥有模型类后,您的控制器可以像这样访问它,例如:
[MyModel sharedModel].myObject = ...;
这种方法很好,IMO,如果你有意义为你的设计创建一个模型。这取决于控制器共享的对象的语义。因此,可能有更适合您案例的替代解决方案。例如,一个控制器可以是共享对象的所有者,另外两个控制器可以在init上接收对第一个控制器的引用,以便它们可以访问其公共属性。