NSTableColumn值绑定到最前面的窗口的NSArrayController,在窗口更改时抛出异常

时间:2011-01-16 05:25:53

标签: cocoa nsarray nstableview cocoa-bindings nsarraycontroller

我在浮动窗口中有一个NSTableView,它动态绑定到NSArrayController实例的arrangedObjects属性,该实例对应于最前面的文档窗口,代码如下:

NSArrayController *documentSpecificArrayController;  // properly set elsewhere
NSTableColumn *tableColumnToBind;  // properly set elsewhere

[tableColumnToBind unbind:NSValueBinding];
[tableColumnToBind bind:NSValueBinding
               toObject:documentSpecificArrayController
            withKeyPath:@"arrangedObjects"
                options:[NSDictionary dictionaryWithObjectsAndKeys:
                         [NSNumber numberWithBool:YES],
                         NSContinuouslyUpdatesValueBindingOption,
                         nil]];

只要表示的数组/表视图为空,就可以正常工作;在一个文档中表视图/表示数组上的所有各种操作都可以正常工作。如果从具有非空表示数组的文档切换到所表示的数组为空的文档,则会引发无休止的*** -[NSCFArray objectAtIndex:]: index (0) beyond bounds (0)异常流。

在切换窗口时,我是否遗漏了在干净地切断绑定时需要做的事情?别的什么? (我是否遗漏了一些有助于诊断我的错误的具体信息?)

1 个答案:

答案 0 :(得分:1)

根据您的评论,您似乎可能正在尝试创建一个检查器调色板或类似的东西。这是真的?如果是这样,您应该直接绑定到活动文档的数组控制器,方法是使用mainWindow.document.myArrayController的键路径绑定到共享应用程序。我认为你正在遇到Bindings的运行循环/计时问题,并且使用这种方法可以减轻这种情况。