2015-04-18 77 views
0

您好我正在嘗試使用核心數據和NSFetchedResults控制器實現表視圖的搜索欄功能。IOS/xcode:帶有NSFETched結果控制器的TableView的搜索欄

相當數量的答案上SO建議使用類似下面的代碼使用謂詞用於搜索:

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText 
{ 
    if ([searchText length] == 0) { 
     _fetchedResultsController = nil; 
    } 
    else { 
     NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name contains[cd] %@", searchText]; 
     [[_fetchedResultsController fetchRequest] setPredicate:predicate]; 
     [[_fetchedResultsController fetchRequest] setFetchLimit:50]; 
    } 

    NSError *error; 
    if (![[self fetchedResultsController] performFetch:&error]) { 
     NSLog(@"Unresolved error %@, %@", error, [error userInfo]); 
    } 

    [[self tableView] reloadData]; 
} 

我也嘗試過這種變化。然而,在任何情況下,我都有同樣的問題。

首先,當您搜索時,它說沒有結果。此外,如果您輸入幾個字母並點擊x,則會出現灰色屏幕,如果再次點擊,則會顯示正常的表格視圖。

但是,如果您單擊取消,則在輸入信件並看到「無結果」後,您將得到您應該得到的結果。一旦發生這種情況,您無法在不重建項目的情況下返回完整的表格視圖。

我到目前爲止唯一的想法是它可能與_fetchedResultsController vs fetchedResultsController(該源文件中的屬性爲ftchedResultsController,不帶下劃線)有關,但更改這些只會引發錯誤消息。

非常感謝您對可能造成這種情況的任何建議。

+0

您是否承諾將FRC用於搜索結果,或者您會考慮使用替代方法嗎? – andrewbuilder

+0

我會考慮一種替代方法,如果它工作,並且很簡單。 – user1904273

+0

你是在使用故事板和一個搜索控制器對象放入你的'UITableViewController'中嗎? – andrewbuilder

回答

1

您有兩個表視圖,一個來自搜索,另一個來自主表。如果要繼續使用搜索隱含的過濾器顯示主表視圖,應該禁用搜索控制器的表視圖。

self.searchResultsController.active = NO; 

你可以這樣的搜索欄,否則在textDidChange將其設置爲YES,像每一個時間設定。在您的FRC獲取器中,檢查搜索欄中的任何字符串,並根據需要添加謂詞。在textDidChangenil出FRC和reloadData。而已。

+0

那去哪?我在_fetchedResultsController = nil後嘗試了它;並得到相同的結果。 – user1904273

+0

它應該始終被禁用。如果您不想使用搜索顯示控制器,則可以將搜索欄全部替換爲UITextField。 - 另外,如果將FRC設置爲零並且它是懶惰地創建的,則只需調用'reloadData'即可。搜索欄邏輯應位於您的FRC創建代碼中。 – Mundi

+0

對不起,我應該把上面的代碼放在哪裏?在viewdidload?嘗試在viewdidload和viewwillappear沒有成功。 – user1904273

相關問題