我正在尝试使用NSPredicate来搜索生成的CoreData对象数组的字符串匹配:
// Grab an array of all Company projects
NSArray *array = [[company projects] allObjects];
我使用以下谓词来匹配任何项目名称,公司名称或客户端名称与不区分大小写的字符串(注意:这应该允许部分匹配,以便'App'将匹配'Apple Inc.'等) :
(name LIKE[cd] %@) OR (ANY companies.name LIKE[cd] %@) OR (ANY companies.clients.name LIKE[cd] %@)
谓词中提到的CoreData关系如下所示:
SELF -> (NSString *) name
SELF -> (NSSet *) companies -> (NSString *) name
SELF -> (NSSet *) companies -> (NSSet *) -> clients -> (NSString *) name
每当我尝试按上述谓词进行过滤时,我会在控制台中找到以下内容:
HIToolbox: ignoring exception 'Can't do regex matching on object {(
"Apple Inc.",
"Test Co.",
Microsoft
)}.'
如果我理解正确,看起来好像尝试匹配密钥路径“companies.clients.name”会返回一个NSSet(或其他对象),其中需要NSString(名称)。
我做错了什么?
答案 0 :(得分:4)
companies.clients.name
将返回NSSet
s的集合,其中集合中的每个元素都是一个公司客户名称的内容(即NSSet
)。您可能希望在谓词字符串中使用companies.@unionOfSets.clients.names
。
请参阅键值编码中使用Set and Array Operators的指南。