这是我的设置。
在我的应用程序委托中,我有一个名为currentFoo的属性。 currentFoo属性设置为当前选定的Foo实例。每个Foo实例都有一个属性,它是一个名为results的NSMutableArray。结果中的对象可以是各种类型,NSNumber,NSString等......
我有一个在某些时间显示的NSTableView,允许用户在currentFoo中查看结果集合。还有用于允许添加和删除结果的UI。
NSTableView有一个列,它绑定到NSArrayController的arrangeObjects控制器键。我编写了一个NSValueTransformer子类,在此绑定中使用该子类将结果数组中找到的各种可能类型转换为我希望在表列中显示的字符串表示形式。
NSArrayController的内容数组绑定连接到NSObjectController的选择控制器键,currentFoo.results作为模型键路径。最后,NSObjectController从应用程序委托中获取其内容。
这一切都很有效,在NSTableView中添加,删除和显示currentFoo.results就像我想要的那样。
我的问题是当我尝试编辑表格视图的内容时。我已经设置了我的NSValueTransformer子类以允许反向转换并实现了reverseTransformedValue:,单步执行代码向我显示,当我编辑NSTableView行中的值时,它被正确发送到我的值转换器的那个方法,转换并返回。
当绑定尝试使用反向转换值更新模型时,会发生错误:
Cocoa Bindings:错误设置值 对象0的关键路径(来自绑定 object(null)):[setValue:forUndefinedKey:]: 这个类不是关键值 符合编码的密钥。
所以基本上这个数组绑定到表视图,当用户编辑行时,我想将字符串转换回适当的对象。 Cocoa绑定给了我这个错误,这让我相信我需要在NSTableColumn绑定的关键路径中设置一些东西,但我不确定是什么。我尝试过“自我”而且没有用。
感谢任何帮助。
答案 0 :(得分:2)
模型键不能为空 - 因此会出现错误消息。
将结果对象从原始对象(字符串,盒装数字等)更改为模型对象(类FooResult),并将绑定的模型键路径设置为您将拥有的那些模型对象的属性名称表视图变异。
基本上,您无法直接绑定到基本对象数组。您必须绑定到模型对象数组的某个属性。