Основные данные NSP предикат с несколькими условиями для множества - PullRequest
1 голос
/ 18 мая 2011

Привет, ребята,

У меня есть следующая база данных основных данных:

(К сожалению, я не могу встроить изображение из-за предотвращения спама!)

База данныхизображение модели: 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] * Завершение приложения из-за неисследованного исключения «NSInvalidArgumentException», причина: «невыполненная генерация SQL для предиката: (errorFC IN {FCMistake: пустой FC; правильное FC: 0, FCMistake: 55; правильное FC: 9, FCMistake: пустое FC;правильный FC: 3, FCMistake: пустой FC; правильный FC: 9, FCMistake: пустой FC; правильный FC: 4}) '

Это должно быть как-то возможно!Заранее спасибо за помощь!

Привет, Ким

1 Ответ

1 голос
/ 25 мая 2011

Из Руководства по программированию предиката:

Базовое хранилище данных SQL поддерживает только операция «один ко многим» на запрос; поэтому в любом предикате, отправленном Хранилище SQL, может быть только один оператор (и один случай этого оператор) от ВСЕХ, ЛЮБЫХ и ВНУТРЕННИХ.

поэтому, если вы используете хранилище данных SQL, вы можете представлять только одно отношение «один ко многим» в своих предикатах. Если вы перейдете в какое-либо другое хранилище постоянных данных, это может означать, что это конкретное ограничение снято.

...