我无法通过视图控制器找出将NSArrayController(又通过表视图绑定)绑定到NSDocument实例的NSArray属性的正确方法。
我的NSDocument子类有一个属性NSArray * pages
。我首先镜像了视图控制器中的pages
属性,但这意味着当NSDocument将项添加到其pages
数组时,表视图不会更新。在这种情况下强制更新的唯一方法是视图控制器中的will..
/ didChangeValueForKey:@"pages"
,但是当未从视图控制器触发更改时,这是不切实际的。直接在NSDocument中调用will/didChangeValueForKey
不会触发阵列控制器更新。
我尝试直接绑定到ViewController的document.pages
,但这似乎不起作用,或者至少也没有显示任何更新。
在这里使用什么是正确的技术?
答案 0 :(得分:0)
解决了 - 即使问题不在我寻找的地方。
我将Array Controller绑定到这样创建的document
属性:
- (Document *)document {
return (Document *)self.view.window.windowController.document;
}
这不起作用,因为它不兼容KVO。解决方案是简单地将NSDocument实例分配给self.representedObject
,这是一个真实的"财产,因而可观察。
将pages
数组的更改包装到willChangeValudForKey:
/ didChangeValueForKey:
确实可以按预期更新绑定的数组控制器,尽管Willeke在其评论中建议的更具体的版本可能更正确