Я пытаюсь выполнить запрос выборки по Контексту управляемого объекта с предикатом, который проверяет путь ключа, который существует в некоторых подклассах абстрактного класса.Запрос выборки CoreData с помощью абстрактного управляемого объекта на конкретный управляемый объект
Для примера здесь является частью объектной модели
Library::NSManagedObject
- AllMovies::to-many relationship->Movie
Movie::NSManagedObject (abstract)
- type::String
- name::String
- mylibrary::to-one relationship->Library
HorrorMovie::Movie
- monster::String
- ghosts::BOOL
RomanceMovie::Movie
- percociouskid::String
- hasferret::BOOL
Если я создал следующий Запрос на получение
NSEntityDescription *entityDescription = [NSEntityDescription entityForName:@"Library"
inManagedObjectContext:moc];
NSFetchRequest *request = [[[NSFetchRequest alloc] init] autorelease];
[request setEntity:entityDescription];
NSPredicate *predicate = [NSPredicate predicateWithFormat:
@"(SUBQUERY(AllMovies, $movies,
$movies.type like[c] 'horror' and
$movies.moster like[c] 'yeti'
)[email protected] != 0)"
]
[request setPredicate:predicate];
NSArray *array = [moc executeFetchRequest:request error:&error];
Выполнение выборки запрос возвращает ошибку, как
keypath $movies.monster not found in entity <NSSQLEntity Movie id=2>
Не похоже, что есть способ сделать ленивую оценку предиката. Некоторые из других вещей, которые я уже пробовал, являются ЛЮБОЙ предикат, используя ключевое слово CAST, пытаясь заменить «AllMovies» в SUBQUERY другим SUBQUERY, чтобы вернуть группу объектов, которая соответствует значению типа.
Можно было бы выполнить несколько запросов для каждого квалификационного типа, но это грубо, медленно и громоздко.
Это под OS X 10.6 с постоянным хранилищем SQL. Выполнение в магазине памяти не является вариантом, так как я работаю с 1 миллионом + «Библиотеки» (проект действительно не имеет ничего общего с фильмами, но я думал, что это хороший пример).
Спасибо, Роб
Любое хорошее решение с Core Data 2017? – Goppinath