我开始认为我的Cocoa应用程序并没有真正按照MVC的原则完成。我的问题如下:
我的项目中有一些类,一个叫Copier.h
,另一个叫DropReciever.h
。 Copier
是我的主视图控制器,因为它具有所有绑定和主要方法。 DropReciever
是NSView
的自定义实现,允许应用通过拖放接受文件。
现在,有一种简单的方法可以从Copier
向DropReceiver
发送消息吗?现在,两个人彼此不认识,我想不出一种优雅的方式来连接它们,因为它们都是单独实例化的。我怎样才能让他们看到对方?或者,有一种优雅的,可口可乐的方式来做得更好吗?
(如果你想查看我的源代码,那就是here。)
答案 0 :(得分:2)
另一种方法是将drop接收器的属性公开为绑定,并将复制器绑定到它(以编程方式)。然后,在drop方法中,让drop接收器将删除的内容设置为此属性的值(您可以将其命名为droppedObject
)。
设置属性时,Bindings的魔力将设置复印机的绑定属性。复印机可以用其设定方法对其进行适当的反应。
答案 1 :(得分:2)
我会在DropReceiver上有一个委托属性。无论将这些东西捆绑在一起的责任是什么,都会成为代表。委托对象可以是一个id,或者你可以为它创建一个协议(这两个习惯用法在Cocoa中很常见)。我到处都是这样做的。你得到了你需要的分离,而不必过多地在房子周围工作。
唯一的缺点是,如果你没有在初始化时设置委托,那么你对它的所有调用都需要通过if( delegate )
检查来保护。
答案 2 :(得分:1)
我通常这样做的方法是在nib中实例化DropReceiver,然后在你的Copier.h中添加一个IBOutlet DropReceiver *
,然后在窗口中将一个连接从Copier实例拖到你的DropReceiver