访问Cocoa应用程序中的控制器

时间:2009-03-14 20:53:54

标签: cocoa model-view-controller

我开始认为我的Cocoa应用程序并没有真正按照MVC的原则完成。我的问题如下:

我的项目中有一些类,一个叫Copier.h,另一个叫DropReciever.hCopier是我的主视图控制器,因为它具有所有绑定和主要方法。 DropRecieverNSView的自定义实现,允许应用通过拖放接受文件。

现在,有一种简单的方法可以从CopierDropReceiver发送消息吗?现在,两个人彼此不认识,我想不出一种优雅的方式来连接它们,因为它们都是单独实例化的。我怎样才能让他们看到对方?或者,有一种优雅的,可口可乐的方式来做得更好吗?

(如果你想查看我的源代码,那就是here。)

3 个答案:

答案 0 :(得分:2)

另一种方法是将drop接收器的属性公开为绑定,并将复制器绑定到它(以编程方式)。然后,在drop方法中,让drop接收器将删除的内容设置为此属性的值(您可以将其命名为droppedObject)。

设置属性时,Bindings的魔力将设置复印机的绑定属性。复印机可以用其设定方法对其进行适当的反应。

答案 1 :(得分:2)

我会在DropReceiver上有一个委托属性。无论将这些东西捆绑在一起的责任是什么,都会成为代表。委托对象可以是一个id,或者你可以为它创建一个协议(这两个习惯用法在Cocoa中很常见)。我到处都是这样做的。你得到了你需要的分离,而不必过多地在房子周围工作。

唯一的缺点是,如果你没有在初始化时设置委托,那么你对它的所有调用都需要通过if( delegate )检查来保护。

答案 2 :(得分:1)

我通常这样做的方法是在nib中实例化DropReceiver,然后在你的Copier.h中添加一个IBOutlet DropReceiver *,然后在窗口中将一个连接从Copier实例拖到你的DropReceiver