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