如何将数组控制器绑定到NSDocument数组属性?

时间:2017-04-26 14:34:55

标签: objective-c cocoa-bindings nsarraycontroller nsdocument

我无法通过视图控制器找出将NSArrayController(又通过表视图绑定)绑定到NSDocument实例的NSArray属性的正确方法。

我的NSDocument子类有一个属性NSArray * pages。我首先镜像了视图控制器中的pages属性,但这意味着当NSDocument将项添加到其pages数组时,表视图不会更新。在这种情况下强制更新的唯一方法是视图控制器中的will.. / didChangeValueForKey:@"pages",但是当未从视图控制器触发更改时,这是不切实际的。直接在NSDocument中调用will/didChangeValueForKey不会触发阵列控制器更新。

我尝试直接绑定到ViewController的document.pages,但这似乎不起作用,或者至少也没有显示任何更新。

在这里使用什么是正确的技术?

1 个答案:

答案 0 :(得分:0)

解决了 - 即使问题不在我寻找的地方。

我将Array Controller绑定到这样创建的document属性:

- (Document *)document {
    return (Document *)self.view.window.windowController.document;
}

这不起作用,因为它不兼容KVO。解决方案是简单地将NSDocument实例分配给self.representedObject,这是一个真实的"财产,因而可观察。

pages数组的更改包装到willChangeValudForKey: / didChangeValueForKey:确实可以按预期更新绑定的数组控制器,尽管Willeke在其评论中建议的更具体的版本可能更正确