Mój wykres obiektowy jest prosty.Core Data NSPredicate dla relacji
Posiadam obiekt Feedentry, który przechowuje informacje o kanałach RSS i relację o nazwie Tag, która prowadzi do obiektu "TagValues". Zarówno relacja (jak i odwrotność) są do-wielu. np. kanał może mieć wiele tagów, a tag może być powiązany z wieloma kanałami.
Nawiązałem do How to do Core Data queries through a relationship? i utworzyłem NSFetchRequest. Ale gdy pobrać dane, otrzymuję wyjątek stwierdzając
NSInvalidArgumentException niezaimplementowane generacji SQL dla orzecznika
Co należy zrobić? Jestem nowicjuszem danych rdzenia :(Wiem, że zrobił coś bardzo złego ... Proszę o pomoc ...
Dzięki
-
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
// Edit the entity name as appropriate.
NSEntityDescription *entity = [NSEntityDescription entityForName:@"FeedEntry" inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:entity];
// Edit the sort key as appropriate.
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"authorname" ascending:NO];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[fetchRequest setSortDescriptors:sortDescriptors];
NSEntityDescription *tagEntity = [NSEntityDescription entityForName:@"TagValues" inManagedObjectContext:self.managedObjectContext];
NSPredicate *tagPredicate = [NSPredicate predicateWithFormat:@"tagName LIKE[c] 'nyt'"];
NSFetchRequest *tagRequest = [[NSFetchRequest alloc] init];
[tagRequest setEntity:tagEntity];
[tagRequest setPredicate:tagPredicate];
NSError *error = nil;
NSArray* predicates = [self.managedObjectContext executeFetchRequest:tagRequest error:&error];
TagValues *tv = (TagValues*) [predicates objectAtIndex:0];
NSLog(tv.tagName); // it is nyt here...
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"tag IN %@", predicates];
[fetchRequest setPredicate:predicate];
// Edit the section name key path and cache name if appropriate.
// nil for section name key path means "no sections".
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:managedObjectContext sectionNameKeyPath:nil cacheName:@"Root"];
aFetchedResultsController.delegate = self;
self.fetchedResultsController = aFetchedResultsController;
-
postu niektóre kodu, dzięki czemu możemy mieć lepszy wygląd – catsby
Mungunth, wygląda jak ty może zapominanie, aby ustawić encję fetchRequest po ponownym ustawieniu predykatu na 'predykaty znaczników IN'. Jeśli to nie jest problem, proszę również opublikować zdjęcie modelu obiektu i mogę dać ci nieco więcej wskazówek. –
Mugunth> Powinieneś dodać swoje rozwiązanie jako odpowiedź i zaakceptować je. – U62