【问题标题】:NSPredicate string matching against NSSet'sNSPredicate 字符串匹配 NSSet 的
【发布时间】:2011-03-25 10:59:22
【问题描述】:

我正在尝试使用 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(名称)。

我做错了什么?

【问题讨论】:

    标签: cocoa nspredicate core-data


    【解决方案1】:

    companies.clients.name 将返回NSSets 的集合,其中集合中的每个元素都是一个公司客户名称的内容(即NSSet)。您可能想在谓词字符串中使用companies.@unionOfSets.clients.names

    请参阅在键值编码中使用Set and Array Operators 的指南。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-06
    • 1970-01-01
    相关资源
    最近更新 更多