#ios #core-data #nspredicate
#iOS #core-data #nspredicate
Вопрос:
Привет, ребята,
У меня есть следующая база данных core-data:
(К сожалению, я не могу вставить изображение из-за предотвращения спама!)
Изображение модели базы данных:http://snapplr.com/eqx9
Я пытаюсь создать fetchRequest, который извлекает все объекты FC, fcCollection.fcSets.trainingSet
свойство которых является объектом в моем коде, НО отсутствует в trainingSet.memorizationSession.mistakeFCs
. Я хочу использовать это в NSFetchedResultsController
.
Я пробовал так много разных вещей, и все они не сработали (к сожалению, я не сохранил то, что пробовал, поэтому я не могу опубликовать). Но я пробовал ПОДЗАПРОСЫ и так далее. Мой последний подход заключается в следующем:
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 == %@ amp;amp; NOT mistakeFC in %@", _trainingSet, mistakeFCs];
К сожалению, я получаю эту ошибку:
2011-05-18 22:26:55.643 TestApp[9464:207] * Завершение работы приложения из-за неперехваченного исключения ‘NSInvalidArgumentException’, причина: ‘не реализованная генерация SQL для предиката : (ошибка FC В {FCMistake: пустой FC; исправьТЕ FC: 0, FCMistake: 55; исправьТЕ FC: 9, FCMistake: пустой FC; исправьТЕ FC: 3, FCMistake: пустой FC; correctFC: 9, FCMistake: пустой FC; correctFC: 4})’
Это должно быть как-то возможно! Заранее спасибо за помощь!
Приветствую, Ким
Ответ №1:
Из руководства по программированию предикатов:
Хранилище Core Data SQL поддерживает только одну операцию «ко многим» для каждого запроса; следовательно, в любом предикате, отправляемом в хранилище SQL, может быть только один оператор (и один экземпляр этого оператора) из ALL, ANY и IN.
итак, если вы используете хранилище данных SQL, вы можете представлять только одно отношение «один ко многим» в своих предикатах. Если вы перейдете на какое-либо другое хранилище сохраняемости, это, по-видимому, подразумевает, что это конкретное ограничение снимается.