我正在 Cocoa 中编写我的第一个主细节视图。我的数据模型非常简单:只是一个 NSMutableArray,其中包含具有几个 NSStrings 属性的单个类的实例。
这是我到目前为止创建的内容:
- 代表实例的类。
- 一个 NSMutableArray 指定为我的应用程序委托的属性以保存类实例。
- 一个主细节视图,带有一个 NSTable 和一些文本字段来保存选择实例的属性。
- 具有指定应用程序委托的绑定的 NSArrayController,以及作为模型键路径的 NSMutableArray 属性的名称。
- NSTable 和 NSArrayController 的列之间的绑定(控制器键 = "arrangedObjects",每列的模型键路径 = 类的一个属性)。
- 视图的文本字段和选择之间的绑定(控制器键 = “选择”,每个文本字段的模型键路径 = 类的属性)。
- 视图中的“+”按钮和“-”按钮可用于添加和删除对象。
但是,这种设计有两个问题:
(1) 我找不到实现“+”和“-”按钮的好方法。首先,我将它们绑定到数组控制器的 add: 和 remove: 属性。虽然这似乎可行,但它有一个问题:我的类声明了一个将 NSStrings 初始化为存根值的 init 成员,但数组控制器似乎没有 [init] 新实例,因为新的列表条目有空字符串每一列。
接下来,我将它们附加到我的应用程序委托中的 IBActions,该委托从 NSMutableArray 中添加或删除了一个对象。然而,这感觉不对——感觉就像我通过不与阵列控制器交谈而违反了模型-视图-控制器架构。例如,“-”函数必须与数组控制器对话才能获得选定的项目。另外,我注意到我必须在更改数组后发送 [didChangeValueForKey] 消息 - 这感觉像是我做错了的信号。
(2) 我视图中的详细子视图之一是绑定到所选对象中的 NSString 的 NSTextView。它确实没有按预期工作:输入新文本时,即使选择了类的其他成员(应该具有不同的值),文本仍然保持不变。此外,文本数据不会保存到类的任何实例中。
有什么想法吗?提前致谢。