大家好,
我有以下核心数据数据库:
(很遗憾,由于防止了垃圾邮件,我无法嵌入图像!)
数据库模型图像:http://snapplr.com/eqx9
我正在尝试创建一个fetchRequest,它会提取其fcCollection.fcSets.trainingSet
属性是我的代码中一个对象的所有FC对象,但这些对象不在trainingSet.memorizationSession.mistakeFCs
中。我想在NSFetchedResultsController
中使用它。
我尝试了很多不同的方法,但它们都没有起作用(不幸的是,我没有保存尝试的内容,因此无法发布)。
但是我尝试了SUBQUERIES等。我的最后一种方法是:
NSFetchRequest *fetchRequest = [[[NSFetchRequest alloc] init] autorelease];
NSEntityDescription *entity = [NSEntityDescription entityForName: kFCMistakeEntityName
inManagedObjectContext: self.managedObjectContext];
[fetchRequest setEntity: entity];
NSPredicate *subPredicate = [NSPredicate predicateWithFormat:
@"memorizationSession.trainingSet == %@", _trainingSet];
[fetchRequest setPredicate: subPredicate];
NSArray *mistakeFCs = [self.managedObjectContext executeFetchRequest:fetchRequest error: nil];
predicate = [NSPredicate predicateWithFormat:
@"ANY fcCollection.fcSets.trainingSet == %@ && NOT mistakeFC in %@", _trainingSet, mistakeFCs];
不幸的是,我收到此错误:
2011-05-18 22:26:55.643 testApp [9464:207] *由于未捕获的异常“ NSInvalidArgumentException”而终止应用程序,原因:“未实现的谓词SQL生成:(mistakeFC IN {FCMistake:空FC; correctFC:0,FCMistake :55; correctFC:9,FCMistake:空FC; correctFC:3,FCMistake:空FC; correctFC:9,FCMistake:空FC; correctFC:4}))
这一定是有可能的!在此先感谢您的帮助!
问候,金
最佳答案
从《谓词编程指南》中:
Core Data SQL存储仅支持
每个查询一对多的操作;
因此,在发送给
SQL存储,可能只有一个
运算符(以及该运算符的一个实例
运算符)来自ALL,ANY和IN。
因此,如果您正在使用SQL数据存储,则只能在谓词中表示一对多关系。如果更改为其他一些持久性存储,则似乎暗示此特定限制已解除。
关于ios - 具有多个条件的Core-Data NSPredicate,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6044896/