将NSTableView绑定到NSUserDefaults中的数组:Mutable!

时间:2009-12-22 14:40:57

标签: objective-c cocoa

我的设置是NSTableView,其中一列绑定到NSUserDefaults。现在,只要我的tableview中没有任何变化,它就能完美运行。 当我试图改变一个值(所有简单的字符串)时,我得到以下错误:

Error setting value for key path of object Acid (from bound object <NSTableColumn: 0x1796ef10> identifier: path with object ID 455 in nib named TXPreferencesWindow.nib): [<NSCFString 0x165297e0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key .

有没有一种简单的方法可以实现这一目标?或者我应该只实现Datasource和Delegate方法? (如果我首先这样做的话,反正会更快......)

2 个答案:

答案 0 :(得分:4)

您的错误表明您的绑定存在问题,因为更改会发送到NSCFString对象,同时应将其发送到控制器。

您应该多了解一下您尝试绑定到表格视图的内容,以便我们可以告诉您如何正确设置它。

在我的一个项目中,我绑定了NSArray NSMutableDictionaryNSTableView,其中包含一个可编辑的布尔值和字符串NSArrayController

我使用了NSUserDefaultsController,它的内容数组绑定到NSTableView中的数组。然后,arrangedObjects的内容将绑定到数组控制器的arrangedObjects.dictionaryKey,并将各个列的值绑定到{{1}}。 IIRC在控制器中选择“处理内容为复合值”是重要的。

答案 1 :(得分:2)

Bindings 真的不喜欢没有模型对象。 NSUserDefaultsController适用于简单值,例如将复选框绑定到应具有布尔值的默认值,但将表列绑定到字符串数组将无法在任何上下文中工作 - 表视图需要可以请求值的模型对象对于模型关键路径。没有模型键路径就是你看到的错误信息(“键不符合键值[插入空字符串]。”)。

您当前的解决方案可能是最简单的。另一个,可能更好用于某些目的,将决定这些字符串是什么,并围绕它建立一个模型对象。 (它不一定非常复杂。即使它只有一个字符串属性,也没有任何问题。)然后,在你自己创建的控制器中有一个数组属性;从初始化程序中的默认值中的字符串数组初始化该属性,并在属性的setter中更新默认值中的字符串数组。