2011-05-18 63 views
1

直升机家伙,核心 - 数据NSPredicate多到多的条件

,我有以下核心数据的数据库:

(!可惜我不能嵌入图像,因为垃圾邮件预防)

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

我想创建一个fetchRequest,其获取所有FC对象,其fcCollection.fcSets.trainingSet属性是在我的代码的对象,但不是在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] * Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'unimplemented SQL generation for predicate : (mistakeFC IN {FCMistake: empty FC; correctFC: 0, FCMistake: 55; correctFC: 9, FCMistake: empty FC; correctFC: 3, FCMistake: empty FC; correctFC: 9, FCMistake: empty FC; correctFC: 4})'

这必须有可能以某种方式!预先感谢您的帮助!

问候,金

回答

1

从谓词编程指南:

The Core Data SQL store supports only one to-many operation per query; therefore in any predicate sent to the SQL store, there may be only one operator (and one instance of that operator) from ALL, ANY, and IN.

因此,如果您使用的是SQL数据存储,你只能代表一个在谓词一个一对多的关系。如果您更改为其他持久性存储库,似乎意味着解除了此特定限制。