2010-05-30 41 views
1

所以我有一個NSSearchField通過綁定直接連接到一個NSArrayController,連接到filterPredicate,以便沒有任何代碼,用戶只需鍵入NSSearchField,過濾接口中呈現給他的NSArrayController中的對象列表(具體而言,是一個NSCollectionView)。與NSSearchField的Laggy接口通過綁定連接到一個NSArrayController

NSSearchField被連接起來提供實時搜索,以便NSCollectionView在用戶鍵入時立即進行過濾,而不是等待用戶停止輸入一小段時間後立即進行過濾。

但是,問題是這使得界面真的很滯後。鍵入顯着延遲了0.5-1秒,似乎NSCollectionView試圖爲用戶輸入的搜索字符串的每個部分對項目的每個重排進行動畫處理。

我想要的是讓搜索成爲現場直播,但在搜索字段中鍵入的內容是流暢的,並且結果要儘可能快地過濾。有沒有辦法通過綁定來做到這一點,或者我需要放入一些自定義代碼來觸發獨立線程上的filterPredicate?

(請注意,我有一個自定義排序算法建立在NSArrayController的,除去它似乎對大家有點幫助與laggyness,但不是全部。)

回答

0

實際上,它看起來像你不能從一個單獨的線程調用setFilterPredicate:。它導致崩潰。

事實證明,我的問題實際上是由於設置過濾器謂詞時反覆調用了一些緩慢的代碼而導致的,這嚴重地降低了過濾的性能。我在我的應用程序中使用Instruments中的Time Profiler工具發現了這一點。這向我展示了哪種方法花費最多時間,並且優化該方法解決了滯後問題。

0

我肯定會帶謂詞下去單獨的線程。看來你知道你必須做什麼。顯然阻止當前線程是滯後問題。