2009-05-29 12 views
10

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; 

-

+1

postu niektóre kodu, dzięki czemu możemy mieć lepszy wygląd – catsby

+0

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. –

+0

Mugunth> Powinieneś dodać swoje rozwiązanie jako odpowiedź i zaakceptować je. – U62

Odpowiedz

3

Czy potrzebujesz SQLite? Próbuję zmagać się z podobnym problemem i stwierdziłem, że wszystko działa zgodnie z oczekiwaniami w sklepie binarnym
Istnieją ograniczenia dotyczące używania SQLite jako sklepu, chociaż nie znalazłem jeszcze dokumentu z listą tylko ograniczenia że one istnieją.

Przykro mi, ale nie mogę pomóc.

+0

Tak, działa z binarnym sklepem Użyłem bazy danych sql lite, ponieważ wydaje mi się szybsze w moim przypadku. rozmiary zbliżone do 5MB (na iPhonie) Czas ładowania aplikacji wynosi <1 s dla sqlite, gdzie jest ona bliska 2 s dla sklepu binarnego – Mugunth

+1

Odpowiedź na to pytanie brzmi ... NSPredicate * predicate = [NSPredicate predicateWithFormat: @ " w% @”, predykaty]; [fetchRequest setPredicate: orzeczenie]; należy zmienić NSPredicate * orzeczenie = [NSPredicate predicateWithFormat: @ "dowolny znacznik w% @", predykaty]; [fetchRequest setPredicate: orzeczenie ]; – Mugunth

+1

Dobrze wiedzieć - to dziwne, twoja wiadomość jest bardzo podobna do ne miałem, a jednak moje jest spowodowane ograniczeniem Core Data z SQLite. Dowiedz się, jak odróżnić! – emp

Powiązane problemy