2

我有NSTableView绑定到NSArrayController通过contentselection indexes。所有伟大至今 - 显示内容等搜索重置NSArrayController选择为无

enter image description here

现在的NSSearchField势必通过filterPredicate阵列控制器,这就是要搜索的内容阵列实例的属性。
搜索/过滤表视图很好,表格视图只显示匹配的条目。

但是,如果现有选择不在搜索结果中,搜索将重置NSTableView上的选择。更糟糕的是,不仅在搜索过程中,而且在结束搜索之后,表格视图中没有选择。

NSArrayController设置为避免空选

然而,调试阵列控制器的selection indexes显示搜索将它们重置为一个空集。不知道该怎么做..

任何提示如何在这种情况下正确配置绑定到真的防止空的选择非常感谢!

回答

3

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

+1

恩 - 认真吗?这非常令人失望! Anywho,谢谢你的提示,我会尝试这种方法。 – Jay

+0

让我澄清一点。如果在阵列控制器中选择了“保留选择”选项,则在过滤期间如果所选对象保留在过滤对象中,则阵列控制器*将*保持其选择。这里的文档有点不清楚。在文档中,保留选择选项控制控制器在*内容*更改时是否记住它的选择。在这种情况下,我们正在过滤现有的内容而不改变它;但是,看起来保存者选择选项也适用于这种情况。 –

+1

我的失望实际上是指**'s​​etAvoidsEmptySelection' ** - 文档声明*“如果是,则接收者保持选择,除非内容数组中没有对象。”*。但是,使用谓词进行过滤时,如果内容数组中仍存在元素,选择实际上可能会变为空。 – Jay