我一直在整个互联网上寻找这个答案,但到目前为止没有运气。所以我需要请教这里聪明善良的人。这是我第一次在这里提问,所以我希望我做对了,而不是重复这个问题。
对于我看到的所有示例,搜索字符串是存储在核心数据中的内容的子字符串。另一方面,我想实现以下目标:
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/