针对此问题,我正在构建一个应用程序,其中包含三个自定义类:AppDelegate
,ListWindowController
和ViewOptionsWindowController
。 AppDelegate
keeps保留ListWindowController
和ViewOptionsWindowController
单个实例的属性。
当用户选择特定菜单项时,将执行AppDelegate
中的实例化ViewOptionsWindowController
的动作。在此控制器的窗口中所做的更改需要反映在ListWindowController
的窗口中(在窗口的表视图中添加或删除列)。
因此,我定义了一个协议ViewOptionsChanged
,它具有两个必需的方法-addColumn
和-removeColumn
(带有用于指示要添加或删除的内容的参数)。我已经表明ListViewController
符合此协议,并且在实例化ViewOptionsWindowController
时正在传递AppDelegate
的ListViewController
实例。 ViewOptionsWindowController
的init方法的声明为:
- (id)initWithListController:(id <ViewOptionsChanged>)listController;
因此,
ViewOptionsWindowController
唯一了解listController
参数的事实是它符合此协议。所以,我的问题是,这是否是对Objective-C协议的正确使用?还是其他一些设计模式更合适?
最佳答案
是的..但我认为这有点令人困惑。我会让listView成为viewOptions的适当委托
也许命名协议ViewOptionsDelegate和方法viewOptions:changedTo:并将逻辑添加/删除listController中的列?
感觉更像可可,并且关于列的逻辑并不属于viewOptions。
但最终-即使您不同意-IMO也可以使用它。