核心数据NSPredicate具有多种多样条件

时间:2011-05-18 12:48:38

标签: ios core-data nspredicate

Helo家伙,

我有以下核心数据库:

(遗憾的是,由于垃圾邮件的预防,我无法嵌入图片!)

数据库模型图片:http://snapplr.com/eqx9

我正在尝试创建一个fetchRequest,它获取fcCollection.fcSets.trainingSet属性是我的代码BUT中的对象的所有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;更正FC:0,FCMistake:55;正确FC:9,FCMistake:空FC;正确FC:3,FCMistake:空FC;正确FC:9,FCMistake:空FC;正确FC:4})'

这必须以某种方式!在此先感谢您的帮助!

问候,金

1 个答案:

答案 0 :(得分:1)

来自谓词编程指南:

  

Core Data SQL商店仅支持   每个查询一对多操作;   因此在任何谓词发送到   SQL商店,可能只有一个   运算符(以及它的一个实例)   运算符)来自ALL,ANY和IN。

因此,如果您使用的是SQL数据存储区,则只能在谓词中表示一对多关系。如果你改为其他一些持久性存储,它似乎意味着这个特殊的限制被解除了。