Cocoa 搜索将NSArrayController选择重置为无

Cocoa 搜索将NSArrayController选择重置为无,cocoa,nstableview,cocoa-bindings,nsarraycontroller,nssearchfield,Cocoa,Nstableview,Cocoa Bindings,Nsarraycontroller,Nssearchfield,我已通过内容和选择索引将NSTableView绑定到NSArrayController。到目前为止一切都很好-内容显示等 现在,NSSearchField通过filterPredicate和要搜索的数组内容实例的属性绑定到数组控制器。 搜索/过滤表视图非常有效;仅显示匹配项的表视图 但是,如果现有选择不在搜索结果中,则搜索会重置NSTableView上的选择。更糟糕的是,不仅在搜索期间,而且在结束搜索后,表视图上没有选择 NSArrayController设置为避免空选择 然而,调试阵列控制器

我已通过
内容
选择索引
NSTableView
绑定到
NSArrayController
。到目前为止一切都很好-内容显示等

现在,
NSSearchField
通过
filterPredicate
和要搜索的数组内容实例的属性绑定到数组控制器。
搜索/过滤表视图非常有效;仅显示匹配项的表视图

但是,如果现有选择不在搜索结果中,则搜索会重置
NSTableView
上的选择。更糟糕的是,不仅在搜索期间,而且在结束搜索后,表视图上没有选择

NSArrayController
设置为避免空选择

然而,调试阵列控制器的
选择索引
表明搜索会将它们重置为一个空集。不太知道如何利用它


关于如何在此场景中正确配置绑定以真正防止空选择的任何提示都非常感谢

不幸的是,阵列控制器不会在排列对象发生变化时跟踪和恢复选择。您必须自己在代码中执行此操作。通过使用KVO观察阵列控制器上的选择,可以跟踪当前选择。还可以观察控制器的排列对象,以了解其何时因过滤而更改。每次更改后,只需将当前选择设置回跟踪值(假定其仍在排列对象中),或将选择设置为新值

呃,说真的??那太令人失望了!不管是谁,谢谢你的提示,我会尝试这种方法。让我澄清一下。如果为阵列控制器选中了“保留选择”选项,则在过滤过程中,如果选定对象保留在排列的对象中,阵列控制器将保持其选择。这里的文档有点不清楚。在文档中,“保留选择”选项控制控制器在其内容更改时是否记住其选择。在这种情况下,我们过滤的是现有的内容,而不是改变它;但无论如何,保留选择选项似乎也适用于这种情况。我的失望实际上是指
setAvoidsEmptySelection
——文档声明“如果是,接收方将保留选择,除非内容数组中没有对象。”。但是,当使用谓词进行过滤时,当内容数组中仍有元素时,所选内容实际上可能变为空。文档似乎仅涉及数组控制器的内容实际更改的情况,例如,主细节设置。在这里,内容不会因为过滤而仅更改排列的对象。