构建一个复杂的谓词以比较属性字符串是否包含数组中的任何字符串

问题描述

我有一个entity name A,它有一个属性A.uid。现在,我有一个包含array of Strings的{​​{1}}。现在,此数组中的任何字符串都可以是A.uid的子字符串。如何为此构建一个global UIDs的复杂nspredicate,以便它仅为我提供那些具有此子字符串与字符串数组匹配的对象。我假设我们不能在NSFetchReuqest内部使用Nsstring操作。

为此,我尝试使用[nspredicate predicateWithFormat:],但是我想以某种方式找出IN内部的子字符串方法。另外,我还必须制作一个SUBQUERY,否则使用SUBQUERY会引发错误

解决方法

我没有一个方便的Objective-C项目,但这在Swift中有效,应该为您完成工作(如果我理解您的问题)。

我在具有单个属性的核心数据实体上运行了此操作:name

NSArray *a = @[
    @"123",@"456",];

NSString *searchString = [a componentsJoinedByString:@"|"];
NSString *format = @"(name MATCHES %@)";
NSString *pattern = [NSString stringWithFormat:@".*(%@).*",searchString];
NSPredicate *predicate = [NSPredicate predicateWithFormat:format,pattern];

我的数据包括:

Joe123Smith
Bob456Smith
Dave789Smith
Steve764Smith
Tom12345Smith
Mike397456288Smith
123TimSmith
TomSmith456

,返回的匹配记录集为:

Joe123Smith
Bob456Smith
Tom12345Smith
Mike397456288Smith
123TimSmith
TomSmith456

修改

我刚刚在一个Objective-C项目中对此进行了测试,它可以按预期工作。