J'essaie d'exécuter une requête d'extraction sur un contexte d'objet géré avec un prédicat qui teste un mot de passe existant dans certaines sous-classes d'une classe abstraite.CoreData récupère une requête via un objet géré abstrait vers un objet géré concret
Par exemple ici est une partie du modèle d'objet
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
Si je mets la demande d'extraction suivante
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];
L'exécution de la requête d'extraction renvoie une erreur comme
keypath $movies.monster not found in entity <NSSQLEntity Movie id=2>
Il ne semble pas qu'il existe un moyen de procéder à une évaluation paresseuse du prédicat. D'autres choses que j'ai déjà essayées sont un prédicat ANY, en utilisant le mot-clé CAST, en essayant de remplacer 'AllMovies' dans le SUBQUERY avec un autre SUBQUERY pour renvoyer un groupe d'objets qui correspond à la valeur 'type'.
Il serait possible de faire plusieurs requêtes pour chaque type de qualification, mais c'est grossier, lent et lourd.
Ceci est sous OS X 10.6 avec un stockage persistant SQL. Faire un magasin en mémoire n'est pas une option puisque je travaille avec 1 million de 'Bibliothèques' (le projet n'a vraiment rien à voir avec les films mais je pensais que c'était un bon exemple).
Merci, Rob
Une bonne solution avec Core Data 2017? – Goppinath