這是一個非常基本的問題,儘管我想了解NSPredicate的基礎知識,但我仍然有點難以理解爲什麼我在這裏遇到錯誤(searchText是一個指向傳入方法的NSString對象的指針)。NSPredicate 101:使用NSPredicate和自定義對象的NSMutableArray
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF.name contains[cd] %@", searchText];
_searchResults = [_personArray filteredArrayUsingPredicate:predicate];
我有一個NSMutableArray的自定義對象(例如,Person對象),它有一個名稱屬性。我想要做的就是使用NSPredicate在用戶開始在UISearchBar中輸入時過濾潛在的匹配項。 IB組件非常簡單,看起來運行良好。當我嘗試搜索和但是開始過濾,基本的應用程序崩潰,出現以下錯誤:
'NSInvalidArgumentException', reason: '-[xPerson isEqualToString:]: unrecognized selector sent to instance 0x8043340'
我的理解是謂語將被傳遞到在NSMutableArray中的每個對象,在謂語self關鍵字指的是相應的對象(我相信在這種情況下甚至沒有必要),而.name可以使用自定義對象上的合成屬性。該錯誤似乎表明-isEqualToString:調用正在自定義對象上調用,而不是對象的屬性。
任何有關我在做什麼錯誤的建議將非常感激。
這實際上是我在翻譯關於該主題的一些其他相關主題後嘗試過的,但我仍然一直得到相同的錯誤。 鑑於自定義類是純粹的骨骼,典型的類使用默認的自動合成屬性(實際上是'name'),所以NSPredicate的語法在任何一種情況下都應該是正確的。 我注意到,如果我在謂詞中將'contains'更改爲'like',它會正常工作(雖然我沒有得到任何結果,但至少不會拋出異常)。爲什麼呢,我不知道。 任何人有任何見解? – amerino
我在我的應用程序中有幾乎相同的東西,它完全適用於我的上述代碼。所以我不確定這個問題是否與Predicate有關。 – iDev