基礎很簡單:只需在您的表視圖控制器中實現<UISearchBarDelegate,UISearchDisplayDelegate>
。這裏是an adequate tutorial。如何在表格視圖中實現搜索(使用FRC)
訣竅是認識到有兩個控制器:一個表視圖控制器和一個搜索顯示控制器。每個控制器都有自己的表格視圖。因此,兩個表格視圖正在播放:普通表格視圖和搜索顯示錶格視圖。當委託方法具有UITableView參數時,差異傳入哪個表視圖,並相應地做不同的事情。
除了以上基本知識之外,數據結構成爲我面臨的主要挑戰。更具體地說,如何篩選和存儲搜索結果?我們有三個選擇:
A.
一個FRC的普通表視圖
存儲結果
使用
filteredArrayWithPredicate
篩選獲取的對象創建一個數組屬性(陣列)雅緩存FRC來獲取對象存儲在內存中enahnce性能
B.
一個FRC的普通表視圖
修改FRC的謂詞做過濾器。蘋果DOC指示3個步驟做:
- 刪除FRC緩存(最好不要使用一個擺在首位)
- 更改謂語
- 調用performFetch
Ç
兩個FRC,每個表視圖一個。詳細的實施是在this popular post
接受的答案提供了我認爲是正確的道路要走。我的理由包括:
A做得很好。它只需要對具有FRC屬性的表格視圖控制器進行無意義的更改。更具體地說,只是在每個委託方法的兩個表視圖之間進行區分,並添加一個NSArray屬性來存儲提取結果。當然,添加過濾代碼。
B有一個潛在的缺點:FRC委託方法會對使用哪個提取請求感到困惑?是搜索之前,搜索期間還是搜索之後?儘管可能有解決方案,但如果解決方案A正在運行,我認爲這不值得。
第二個缺點是,如果我們希望搜索結果即時更改。搜索欄中的每個單字母用戶都將導致FRC執行提取操作,這相當昂貴。 C通過使用兩個FRC避免B的第一個缺點,但由於完全相同的原因而遭受第二個缺點。
其他的事情要考慮:
做過濾在後臺隊列。因此,當用戶在搜索欄中輸入時,無論您的過濾費用多高,屏幕都不會被阻止。
創建一個輔助方法來區分兩個表視圖。在相關的委託方法中調用helper方法,這會使代碼更清晰。
以上是我對錶格視圖中執行搜索的理解。如果有任何錯誤,請幫忙指出。非常感謝。