objective-c - NSPredicate 101 : Using NSPredicate with a NSMutableArray of custom objects

标签 objective-c ios nsmutablearray nspredicate

这是一个非常基本的问题,即使我认为理解了 NSPredicate 的基础知识,我仍然对为什么我在这里遇到错误感到困惑(searchText 是一个指向正在处理的 NSString 对象的指针传递到方法中)。

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

我有一个自定义对象(例如 Person 对象)的 NSMutableArray,它有一个名称属性。我想要做的就是在用户开始在 UISearchBar 中输入时使用 NSPredicate 来过滤潜在的匹配项。 IB 组件非常简单,而且看起来运行良好。但是,当我尝试搜索并开始过滤时,基本应用程序崩溃并出现以下错误:

'NSInvalidArgumentException',原因:'-[xPerson isEqualToString:]:无法识别的选择器发送到实例 0x8043340'

我的理解是谓词将被传递给 NSMutableArray 中的每个对象,谓词中的 SELF 关键字引用相应的对象(我相信,在这种情况下甚至不是真正必要的),并且.name 能够在自定义对象上使用合成属性。该错误似乎表明 -isEqualToString: 正在对自定义对象而不是对象的属性调用调用。

如有任何关于我做错的建议,我们将不胜感激。

最佳答案

试试看,

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

关于objective-c - NSPredicate 101 : Using NSPredicate with a NSMutableArray of custom objects,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12870115/

相关文章:

objective-c - 为自定义 Obj-C 对象创建 Xcode 数据格式化程序包

ios - 如何更改 "back"栏按钮项的标题?

ios - 如何使用for循环在NSMUtableArray中添加对象

ios - 如何确定用户是否与 GPS 坐标在同一条道路上

c# - 使用 DecelerationEnded 会干扰其他回调

iOS - 如何选择数组中的对象比其他对象更多

objective-c - 释放 NSMutableArray 会导致 EXC_BAD_ACCESS 错误

ios - 用户取消 3 次后重新启用 GameCenter(仅限 iOS7)

ios - UIScrollView 弹回来

objective-c - XC测试用例 : ld: symbol(s) not found for architecture x86_64