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。没有太多的代码,然后我也有完美的控制。