问题描述
我有一个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项目中对此进行了测试,它可以按预期工作。