大家好,

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

(很遗憾,由于防止了垃圾邮件,我无法嵌入图像!)

数据库模型图像: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/

10-10 08:30