这是一个相当基础的问题,虽然我认为我已经理解了NSPredicate的基本原理,但我仍然有点困惑,不知道为什么会出现错误(searchText是传递到该方法中的NSString对象的指针)。
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF.name contains[cd] %@", searchText];
_searchResults = [_personArray filteredArrayUsingPredicate:predicate];
我有一个NSMutableArray存储着自定义对象(例如Person对象),它们都有一个名字属性。我想要做的就是使用NSPredicate在用户在UISearchBar中输入时过滤可能的匹配项。IB组件非常简单,并且似乎工作正常。当我尝试搜索和开始过滤时,应用程序却基本崩溃,并出现以下错误:
'NSInvalidArgumentException' ,原因:'-[xPerson isEqualToString:]:向实例0x8043340发送无法识别的选择器'
我的理解是,谓词将传递给NSMutableArray中的每个对象,谓词中的SELF关键字将引用相应的对象(在这种情况下,我认为甚至不是真正必要的),而.name则可以使用自定义对象的合成属性。但是错误似乎表明-isEqualToString:调用被调用于自定义对象而不是对象的属性。
如果您能提供一些建议,告诉我哪里做错了,我将不胜感激。