2

这是我的设置。

在我的应用程序委托中,我有一个名为 currentFoo 的属性。currentFoo 属性设置为当前选定的 Foo 实例。每个 Foo 实例都有一个名为 results 的 NSMutableArray 属性。结果中的对象可以是各种类型,NSNumber,NSString等......

我有一个在特定时间显示的 NSTableView,它允许用户查看 currentFoo 中的结果集合。还有 UI 允许从结果中添加和删除。

NSTableView 有一个绑定到 NSArrayController 的排列对象控制器键的单列。我编写了一个 NSValueTransformer 子类,该子类在此绑定中用于将结果数组中的各种可能类型转换为我希望在表列中显示的字符串表示形式。

NSArrayController 的内容数组绑定连接到 NSObjectController 的选择控制器键,currentFoo.results 作为模型键路径。最后 NSObjectController 从应用程序委托中获取其内容。

这一切都很好,在 NSTableView 中添加、删除和显示 currentFoo.results 就像我想要的那样工作。

我的问题是当我尝试编辑表格视图的内容时。我已将我的 NSValueTransformer 子类设置为允许反向转换并实现了 reverseTransformedValue:,单步执行代码显示当我编辑 NSTableView 行中的值时,它被正确地发送到我的值转换器的该方法,转换并返回。

然后,当绑定尝试使用反向转换的值更新模型时,就会发生错误:

Cocoa Bindings:对象 0 的键路径设置值错误(来自绑定对象(null)):[ setValue:forUndefinedKey:]:此类与键的键值编码不兼容。

所以基本上有这个数组绑定到表视图,当用户编辑行时,我想将字符串转换回适当的对象。Cocoa bindings 给了我这个错误,这让我相信我需要在 NSTableColumn 绑定的关键路径中设置一些东西,但我不确定是什么。我试过“自我”,但没有奏效。

任何帮助表示赞赏。

4

1 回答 1

2

模型键不能为空 - 因此您会收到错误消息。

将结果对象从原始对象(字符串、盒装数字等)更改为模型对象(FooResult 类),并将绑定的模型键路径设置为您将拥有表格视图的模型对象的属性名称变异。

基本上,您不能直接绑定到原始对象数组。您必须绑定到模型对象数组的某些属性。

于 2009-01-03T23:56:36.313 回答