簡體   English   中英

NSPredicate 101:將NSPredicate與NSMutableArray自定義對象一起使用

[英]NSPredicate 101: Using NSPredicate with a NSMutableArray of custom objects

這是一個非常基本的問題,即使我認為理解NSPredicate的基礎知識,我仍然有點難過為什么我在這里得到一個錯誤(searchText是一個指向NSString對象的指針,它被傳遞到方法)。

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF.name contains[cd] %@", searchText];
_searchResults = [_personArray filteredArrayUsingPredicate:predicate];

我有一個自定義對象的NSMutableArray(例如,Person對象),它有一個name屬性。 我想要做的就是在用戶開始輸入UISearchBar時使用NSPredicate來過濾潛在的匹配。 IB組件很簡單,看起來功能很好。 但是,當我嘗試搜索並開始過濾時,基本應用程序崩潰並出現以下錯誤:

'NSInvalidArgumentException', reason: '-[xPerson isEqualToString:]: unrecognized selector sent to instance 0x8043340'

我的理解是謂詞將被傳遞給NSMutableArray中的每個對象,謂詞中的SELF關鍵字引用相應的對象(我相信,在這種情況下甚至不需要),而.name是能夠在自定義對象上使用合成屬性。 該錯誤似乎表明在自定義對象上調用了-isEqualToString:調用,而不是對象的屬性。

任何關於我做錯的建議都會受到極大的贊賞。

試試這樣,

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name contains[cd] %@", searchText];
_searchResults = [_personArray filteredArrayUsingPredicate:predicate];

我有同樣的問題。 錯誤不在預測中,而是在表視圖的單元格中。 我正在設置這樣的單元格:

cell.textLabel.text = [self.searchResults objectAtIndex:indexPath.row];

我忘了讓Object解析。然后我將代碼更改為:

cell.textLabel.text = ((Product*)[self.searchResults objectAtIndex:indexPath.row]).name;

所以,也許你的錯誤也不在NSPredicate中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM