Core data NSPredicate字符串中的isSubsetOfSet

Core data NSPredicate字符串中的isSubsetOfSet,core-data,nspredicate,nsset,Core Data,Nspredicate,Nsset,我很难检查NSPredicate字符串中的一个SensorDeredSet是否是另一个SensorDeredSet的子集 我可以通过下面的模块来实现结果: request.predicate = [NSPredicate predicateWithBlock:^BOOL(id object, NSDictionary *bindings) { NSOrderedSet *biggerSet = [object valueForKey:@"attributeName"]; retu

我很难检查NSPredicate字符串中的一个SensorDeredSet是否是另一个SensorDeredSet的子集

我可以通过下面的模块来实现结果:

request.predicate = [NSPredicate predicateWithBlock:^BOOL(id object, NSDictionary *bindings) {
    NSOrderedSet *biggerSet = [object valueForKey:@"attributeName"];
    return [smallerSet isSubsetOfOrderedSet:biggerSet];
}];
但我相信字符串格式可能更有效,我错了吗

尝试过像@attribute包含%@和@attribute中的%@这样的东西,但没有运气


谢谢您的帮助。

类似的方法应该可以:

NS(Ordered)Set *smallerSet = …
request.predicate =
  [NSPredicate predicateWithFormat:@"SUBQUERY(attribute, $a, $a IN %@).@count == %lu",
         smallerSet, (unsigned long)[smallerSet count]];
谓词检查smallerSet中包含的属性值的数量是否为 等于smallerSet中的元素数。如果是,则smallerSet必须为 属性集的子集

基于字符串的谓词通常不会比基于块的比较快 . 但核心数据获取请求具有
SQlite存储文件不能使用基于块的谓词。

在SQL数据存储上,我得到“子查询中不能有非关系集合元素”。我担心我的收藏中的自定义对象有问题。但它覆盖了'isEqual'和'hash'。有什么想法吗?看起来自定义对象必须是NSManagedObject的子类,并且可能通过关系进行连接。