Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa NSTableColumn值绑定到最前面的窗口';s NSArrayController在窗口更改时引发异常_Cocoa_Nsarray_Nstableview_Cocoa Bindings_Nsarraycontroller - Fatal编程技术网

Cocoa NSTableColumn值绑定到最前面的窗口';s NSArrayController在窗口更改时引发异常

Cocoa NSTableColumn值绑定到最前面的窗口';s NSArrayController在窗口更改时引发异常,cocoa,nsarray,nstableview,cocoa-bindings,nsarraycontroller,Cocoa,Nsarray,Nstableview,Cocoa Bindings,Nsarraycontroller,我在浮动窗口中有一个NSTableView,它动态绑定到NSArrayController实例的arrangedObjects属性,该实例对应于最前面的文档窗口,代码如下: NSArrayController *documentSpecificArrayController; // properly set elsewhere NSTableColumn *tableColumnToBind; // properly set elsewhere [tableColumnToBind unb

我在浮动窗口中有一个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:]:索引(0)超出边界(0)
异常


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

根据您的评论,您可能正在尝试创建检查器调色板或类似的东西。这是真的吗?如果是这样,您可能只需要通过使用mainWindow.document.myArrayController的键路径绑定到共享应用程序,直接绑定到活动文档的数组控制器。我认为您在绑定方面遇到了运行循环/计时问题,使用此方法应该可以缓解这一问题。

“在其他地方正确设置”[需要引用]:-)@Joshua Nozzi:我知道有人会问。:)数组控制器是document类的一个属性,document类是新的最顶层窗口的委托,所以它是这样得到的;表列包含在一个表视图中,该表视图连接到发生此代码的类的IBOutlet。我已经验证了,独立于这个异常抛出,这两个变量都是按预期设置和更改的。我将很快进行测试,但是(1)用例有点像一个检查器调色板,(2)它对我到目前为止看到的有意义,以及(3)它将简化将事物连接到一个简单绑定的相当冗长和混乱的方式。文档中有什么地方我应该从一开始就知道如何做到这一点吗?我不知道这在苹果的东西中有明确的记录,但这是一个解决方案,从10.3天以来一直在各种可可社区网站上流传。我自己用。警告:如果您有不同的文档类型,但并非所有文档都有该键路径,那么您需要“填空”,并为不符合规范的文档类中的myArrayController部分返回nil,否则您将得到键路径错误。其他建议:在调色板的xib中放置一个数组控制器,并将表绑定到它。然后将该数组控制器的内容绑定到文档的数组控制器要表示的集合(通过相同的键路径“技巧”,只是使用不同的最终段-集合的键而不是数组控制器的键)。调色板的窗口应该有自己的控制器。我肯定我做了一些愚蠢的事情,但我无法让这个绑定在所有面板中工作。调色板中的tableview从来没有显示任何内容。(调色板中的控件在文档窗口中都有相同的控件,绑定到文档对象的相同属性,因此我可以看到调色板中应该发生什么。)除此之外,我希望如果调色板是主窗口,绑定会中断,但我认为这更容易解决。在调色板的XIB中使用单独的数组控制器实例就可以解决这个问题。谢谢