objective-c - 使用 NSPredicate 的一种反向字符串比较

标签 objective-c ios core-data nspredicate

我一直在整个互联网上寻找这个答案,但到目前为止没有运气。所以我需要请教这里聪明善良的人。这是我第一次在这里提问,所以我希望我做对了,而不是重复这个问题。

对于我看到的所有示例,搜索字符串是存储在核心数据中的内容的子字符串。另一方面,我想实现以下目标:

core data中存储的字符串,其实就是子字符串。我想通过获取所有具有属于提供的搜索字符串的子字符串的核心数据行来进行搜索。

例如: 在核心数据中,我有“AB”、“BC”、“ABC”、“ABCDEF”、“GH”、“ABA” 在应用程序中,我通过提供 super ​​字符串进行搜索:“ABCDEF”,结果将返回“AB”、“BC”、“ABC”、“ABCDEF”,但不返回“GH”、“ABA”,因为这两个子串不属于超串。

我应该如何设置我的 predicateWithFormat 语句?

这行不通,因为它在做相反的事情:

NSPredicate *myPredicate = [NSPredicate predicateWithFormat:@"substring LIKE[c] %@", @"ABCDEF"];

谢谢大家!

最佳答案

CONTAINS 的反转将不起作用。此外,您将无法使用 LIKE,因为您必须获取正在搜索的属性并将其转换为通配符字符串。

方法是使用 MATCHES,因为您可以使用正则表达式。首先,通过在每个字母后附加 * 将您的搜索字符串转换为正则表达式。然后形成谓词。

此解决方案已经过测试,可用于您的示例。

NSString *string= @"ABCDEF";
NSMutableString *new = [NSMutableString string];
for (int i=0; i<string.length; i++) {
    [new appendFormat:@"%c*", [string characterAtIndex:i]]; 
}
// new is now @"A*B*C*D*E*F*";
fetchRequest.predicate = [NSPredicate predicateWithFormat:
                          @"stringAttribute matches %@", new];

谓词中的 stringAttribute 是托管对象的 NSString 属性的名称。

关于objective-c - 使用 NSPredicate 的一种反向字符串比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10941811/

相关文章:

ios - Sprite Kit SKActions 未触发

ios - 保存 UIImage 的缩略图会横向/上下翻转图像

ios - UIImage 不加载图像

ios - 呈现和关闭 View 导致异常

iphone - 保存和加载数据 - CoreData

ios - 过滤关系 Coredata 的子项而不是父项

objective-c - UIScrollView 不更新

ios - 如何在 BBC News 应用程序的 UIScrollView 中添加 "advertisements"?

ios - Datepicker maximumDate 在当天早​​些时候停留在昨天

core-data - CoreData Swift 和 transient 属性 getter