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

Objective c 将NSTableView绑定到NSUserDefaults:Mutable中的数组!,objective-c,cocoa,Objective C,Cocoa,我的设置是一个NSTableView,其中一列绑定到NSUserDefaults。现在,只要我的tableview中没有任何更改,它就可以正常工作。 当我尝试更改值(所有简单字符串)时,会出现以下错误: 为对象Acid的键路径设置值时出错(来自绑定对象标识符:nib中名为TXPreferencesWindow.nib的对象ID为455的路径):[setValue:forUndefinedKey:]:此类不符合键的键值编码。 有没有一个简单的方法可以做到这一点?或者我应该只实现Datasource

我的设置是一个
NSTableView
,其中一列绑定到
NSUserDefaults
。现在,只要我的tableview中没有任何更改,它就可以正常工作。 当我尝试更改值(所有简单字符串)时,会出现以下错误:

为对象Acid的键路径设置值时出错(来自绑定对象标识符:nib中名为TXPreferencesWindow.nib的对象ID为455的路径):[setValue:forUndefinedKey:]:此类不符合键的键值编码。


有没有一个简单的方法可以做到这一点?或者我应该只实现Datasource和Delegate方法吗?(如果我一开始就这么做了,无论如何速度都会更快…

您的错误表明绑定有问题,因为更改被发送到
NSCFString
对象,而它应该被发送到控制器

您应该告诉我们更多关于您试图绑定到表视图的内容,以便我们可以告诉您如何正确设置它

在我的一个项目中,我将
NSMutableDictionary
NSArray
绑定到
NSTableView
,其中包含一个可编辑的布尔值和字符串


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

您的错误表明绑定存在问题,因为更改将发送到
NSCFString
对象,而它应该发送到控制器

您应该告诉我们更多关于您试图绑定到表视图的内容,以便我们可以告诉您如何正确设置它

在我的一个项目中,我将
NSMutableDictionary
NSArray
绑定到
NSTableView
,其中包含一个可编辑的布尔值和字符串

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

绑定确实不喜欢没有模型对象。NSUserDefaultsController适用于简单值,如将复选框绑定到应具有布尔值的默认值,但将表列绑定到字符串数组在任何上下文中都不起作用。表视图需要模型对象,它可以请求模型键路径的值。没有模型密钥路径是您看到错误消息的原因(“密钥[插入的空字符串]不符合键值”)

您当前的解决方案可能是最简单的。另一种可能更好的方法是确定这些字符串是什么,并围绕这些字符串构建一个模型对象。(它不必很复杂。即使它只有一个字符串属性,也没有什么问题。)然后,在您自己创建的控制器中拥有这些属性的数组属性;从初始值设定项中的默认字符串数组初始化该属性,并在属性的setter中更新默认字符串数组。

绑定确实不喜欢没有模型对象。NSUserDefaultsController适用于简单值,如将复选框绑定到应具有布尔值的默认值,但将表列绑定到字符串数组在任何上下文中都不起作用。表视图需要模型对象,它可以请求模型键路径的值。没有模型密钥路径是您看到错误消息的原因(“密钥[插入的空字符串]不符合键值”)


您当前的解决方案可能是最简单的。另一种可能更好的方法是确定这些字符串是什么,并围绕这些字符串构建一个模型对象。(它不必很复杂。即使它只有一个字符串属性,也没有什么问题。)然后,在您自己创建的控制器中拥有这些属性的数组属性;从初始值设定项中的默认字符串数组初始化该属性,并在属性的setter中更新默认字符串数组。

我试图将列值直接映射到用户默认值。因此,添加NSArrayController似乎是更好的方法。但我已经将其更改为围绕NSUserDefaults的NSTableDatasource。没有太多的代码,我也有完美的控制。我试图将列值直接映射到用户默认值。因此,添加NSArrayController似乎是更好的方法。但我已经将其更改为围绕NSUserDefaults的NSTableDatasource。没有太多的代码,然后我也有完美的控制。