macos - 将 NSTableView 绑定(bind)到 Swift 中的字符串数组

标签 macos swift cocoa nstableview cocoa-bindings

我通过数组 Controller 绑定(bind),用 NSTableView 显示字符串数组的内容。

我在数组 Controller 的属性检查器的类名中有“NSString”,在数组 Controller 的绑定(bind)检查器的模型键路径中我有我的数组的路径。我将表的唯一列在其值部分绑定(bind)到数组 Controller ,但未指定模型键路径(它只是一个字符串数组)。

因此,数组的字符串在表格中显示良好。但我无法编辑任何行:

2015-06-17 15:48:44.285 ProjectName[9043:123132] An uncaught exception was raised
2015-06-17 15:48:44.285 ProjectName[9043:123132] Error setting value for key path  of object five (from bound object <NSTableColumn: 0x618000082d50>    identifier: (null)): [<Swift._NSContiguousString 0x608000045d60> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key .

“five”是我试图编辑的数组中的第五个字符串。正如您所见,“路径”中存在间隙,因为列值的模型键路径为空。

那么我是否以某种方式在模型键路径中引用字符串本身以使数组可通过表进行编辑?

最佳答案

类名绝对应该设置为有效的类。更大的问题是数组 Controller 不能很好地处理字符串数组。没有(合理的)方法可以在字符串上使用 -setValue:forKey:,因为字符串本身就是正在编辑(替换)的内容,而不是某些属性(如“displayName”) ).

我知道这看起来很浪费,但如果你真的必须使用数组 Controller (稍后会详细介绍),你应该创建一个带有字符串属性的类并将 that 设置为 Controller 的类名并维护该类的数组而不是纯字符串。假设您的字符串数组代表标签。使用 String(或 NSString)类型的 name 属性创建一个 Tag 类。将 Controller 的类名设置为 Tag。这样,就有了要绑定(bind)的关键路径。

但是如果你真的认为自己除了字符串数组之外不需要任何东西,你可以只使用标准的(而且无限灵活)[NSTableViewDataSource][1] 协议(protocol)和好的旧的-由按钮触发的时尚 Action (如添加和删除)。这样,您就不会因为在这种情况下对于非常抽象的 Controller 而言过于原始的类型(字符串)而与 Cocoa Bindings/KVC/KVO 机制作斗争。

至于工作量,它几乎是“其他六分之六”,但不完全是——我会选择“让它成为一个具有名称属性的类”路线,原因有二:1)它比启动整个表 Controller /数据源要少工作,并且 2) 以后您可能希望有一个更可扩展的类,而不是一个简单的字符串来表示“东西列表”,即使您不这么认为现在。

关于macos - 将 NSTableView 绑定(bind)到 Swift 中的字符串数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30892315/

相关文章:

node.js - 安装node和npm的问题

ios - 应用程序在 iPhone 6 中崩溃

iphone - 新手需要有关洗牌数组的帮助

SecTransformRef 的 iOS 等效项?

使用 COMODO 证书签名的 JavaFx dmg 包

c++ - 支持 linux/types.h OSX

swift - 检查是否按下了 u 键 Swift Cocoa

swift - 使用关联值时获取枚举名称

ios - 无法让 UISwitch 约束工作 - swift 4

macos - CFBundleCopyExecutableURL 不返回绝对 URL