这是一个非常基本的问题,即使我认为理解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:调用,而不是对象的属性。
对我所做错的任何建议都会非常感激。
答案 0 :(得分:5)
尝试这样,
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name contains[cd] %@", searchText];
_searchResults = [_personArray filteredArrayUsingPredicate:predicate];
答案 1 :(得分:0)
我遇到了同样的问题。错误不在预测中,而是在表视图的单元格中。 我正在设置这样的单元格:
cell.textLabel.text = [self.searchResults objectAtIndex:indexPath.row];
我忘了让Object解析。然后我将代码更改为:
cell.textLabel.text = ((Product*)[self.searchResults objectAtIndex:indexPath.row]).name;
所以,也许你的错误也不在NSPredicate中。