ios - NSPredicate 包含搜索包含数字和字母的字符串

标签 ios core-data nsstring nspredicate

我必须使用 NSPredicate 来搜索一些 Core Data 对象。但是自定义对象的键 name 可以同时包含数字和字母。 该字符串可能类似于:John 1234 LennonRingo Starr。 我通常会使用谓词 NSPredicate *predicate = [NSPredicate predicateWithFormat:@"Any name CONTAINS[cd] %@",searchString];

但是,如果我搜索 John Lennon 谓词不会返回任何内容,因为它无法比较它是否包含字符 John Lennon,因为缺少1234。我可以使用哪种谓词有什么提示吗?

最佳答案

您可以标记您的查询,可能就像

一样简单
NSArray *tokens = [querystring componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];

然后构造一个复合谓词。

NSMutableArray *predarray = [NSMutableArray array];

for(NSString *token in tokens)
{
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"Any name CONTAINS[cd] %@",token];
    [predarray addObject:predicate];
}

NSPredicate *final = [NSCompoundPredicate andPredicateWithSubpredicates:predarray];

并将其提供给您的查询

在现实生活中,我会对每个 token 运行一些验证,以检查它是否会成为一个有效的谓词,并且不会崩溃或产生安全风险。例如去除特殊字符,如“* []”

编辑:更正谓词类型以处理问题情况。

关于ios - NSPredicate 包含搜索包含数字和字母的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12899388/

相关文章:

ios - 如何在 swift 中使用文本字段文本 "Amount"向表格 View 添加额外的行

ios - 在 iOS 上解开 AES key

ios - NSManagedObject setter 给我 [ MyObject setName :]: unrecognized selector sent to instance

iphone - 删除 NSString 的一部分并将其复制到另一个 NSString

iphone - 当值为空和某个数字时如何在标签中显示字符串值

javascript - 删除移动设备上的 'bouncy scrolling'

ios - 是否有某种方法可以让每个应用程序都使用单个 NSManagedObjectContext 进行读取和写入?

ios - NSManagedObjectContext.fetch 不一致(_ :) method documentation

ios - 将 UISegmentedControl 的结果添加到核心数据实体中的属性

objective-c - 如何检查一个 NSInteger 是否大于另一个 NSInteger?