ViewOptionsWindowController

ViewOptionsWindowController

针对此问题,我正在构建一个应用程序,其中包含三个自定义类:AppDelegateListWindowControllerViewOptionsWindowControllerAppDelegate keeps保留ListWindowControllerViewOptionsWindowController单个实例的属性。

当用户选择特定菜单项时,将执行AppDelegate中的实例化ViewOptionsWindowController的动作。在此控制器的窗口中所做的更改需要反映在ListWindowController的窗口中(在窗口的表视图中添加或删除列)。

因此,我定义了一个协议ViewOptionsChanged,它具有两个必需的方法-addColumn-removeColumn(带有用于指示要添加或删除的内容的参数)。我已经表明ListViewController符合此协议,并且在实例化ViewOptionsWindowController时正在传递AppDelegateListViewController实例。 ViewOptionsWindowController的init方法的声明为:

- (id)initWithListController:(id <ViewOptionsChanged>)listController;


因此,ViewOptionsWindowController唯一了解listController参数的事实是它符合此协议。

所以,我的问题是,这是否是对Objective-C协议的正确使用?还是其他一些设计模式更合适?

最佳答案

是的..但我认为这有点令人困惑。我会让listView成为viewOptions的适当委托

也许命名协议ViewOptionsDelegate和方法viewOptions:changedTo:并将逻辑添加/删除listController中的列?

感觉更像可可,并且关于列的逻辑并不属于viewOptions。

但最终-即使您不同意-IMO也可以使用它。

09-25 19:53