- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText {
[displayItems removeAllObjects]; //clear array to ensure no repeat info
if ([searchText length] == 0) {
displayItems = (NSMutableArray *)allItems;
}
else {
//search by item category
NSPredicate *catPredicate = [NSPredicate predicateWithFormat:@"category
CONTAINS[cd] %@",searchText];
[searchable filterUsingPredicate:catPredicate];
//further search by item name
NSPredicate *namePredicate = [NSPredicate predicateWithFormat:@"name CONTAINS[cd]
%@",searchText];
[searchable filterUsingPredicate:namePredicate];
displayItems = searchable;
searchable = (NSMutableArray *)allItems;
}
[self.searchResults reloadData];
}
此方法是我試圖爲較大項目創建的簡單可搜索表視圖的一部分。我的代碼編譯並運行,當我在搜索欄中鍵入內容時,搜索功能似乎可以正常工作,但是一旦輸入第二個字母,程序就會崩潰。如果我連續輸入兩個字母,則會拋出'NSInvalidArgumentException',原因:' - [_ NSArrayI filterUsingPredicate:]:無法識別的選擇器發送到實例0x6d6c040',但如果我鍵入一個字母然後按Enter或Backspace,它拋出這個人'NSInvalidArgumentException',原因:' - [ _NSArrayI removeAllObjects]:無法識別的選擇器發送到實例0x6a7f300'當我鍵入第二個字母。使用NSPredicate搜索對象陣列
我對objective-c很新穎,這讓我感到困惑。我可以得到任何幫助將不勝感激....: - /更新後仍然有問題。
searchable =(NSMutableArray *)allItems; 你不能通過鑄造一個NSArray到一個NSMutableArray – 2012-02-23 08:14:35
searchable被聲明爲一個NSMutableArray,allItems是一個NSArray。我鑄造它,以便我可以將allItems的所有項目放回到可搜索的數組中。我不知道這是否合法,或者如果這是你的意思。對不起,似乎無助和困惑,但Objective-C是我的新領域。作爲一個方面說明,我只是嘗試了一種完全不同的搜索算法,其中有問題的行和NSPredicate語句被刪除,並且我遇到了同樣的問題,除了函數甚至沒有假裝工作。 – 2012-02-23 17:16:22
非常感謝!我回到了NSPredicate解決方案,並用addObjectsFromArray替換了鑄造語句,它的工作就像一個魅力。我不明白爲什麼,但它工作。謝謝您的幫助。 – 2012-02-23 17:28:11