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