使用NSPredicate进行相反类型的字符串比较

Bev*_*ter 5 core-data objective-c nspredicate ios

我一直在网上搜索这个答案,但到目前为止还没有运气.所以我需要在这里咨询聪明善良的人.这是我第一次在这里提问,所以我希望我这样做是正确的而不是重复这个问题.

对于我看到的所有示例,它是搜索字符串,它是存储在Core Data中的子字符串.另一方面,我想实现以下目标:

存储在核心数据中的字符串实际上是子字符串.我想通过获取具有子字符串的所有核心数据行属于提供的搜索字符串来进行搜索.

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

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

这不会起作用,因为它正在做相反的事情:

NSPredicate *myPredicate = [NSPredicate predicateWithFormat:@"substring LIKE[c] %@", @"ABCDEF"];
Run Code Online (Sandbox Code Playgroud)

谢谢大家!

Mun*_*ndi 4

相反的则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];
Run Code Online (Sandbox Code Playgroud)

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