2009-05-29 19 views
10

Il mio grafico degli oggetti è semplice.Dati principali NSPredicate per le relazioni

Ho un oggetto feedentry che memorizza informazioni sui feed RSS e una relazione denominata Tag che collega all'oggetto "TagValues". Sia la relazione (sia quella inversa) sono per molti. Ad esempio, un feed può avere più tag e un tag può essere associato a più feed.

Mi sono riferito a How to do Core Data queries through a relationship? e ho creato un NSFetchRequest. Ma quando recuperare i dati, ottengo un'eccezione affermando,

NSInvalidArgumentException non implementato la generazione SQL per predicato

Cosa devo fare? Sono un novizio di dati fondamentali :(Lo so che ho fatto qualcosa di terribilmente sbagliato ... Please help ...

Grazie

-

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

post di qualche del codice in modo che possiamo avere un aspetto migliore – catsby

+0

Mungunth, sembra che si può dimenticarsi di impostare l'entità di fetchRequest dopo aver reimpostato il predicato su 'tag predicati IN'. Se questo non è il problema, per favore pubblica anche una foto del modello dell'oggetto e io posso darti un po 'più di guida. –

+0

Mugunth> È necessario aggiungere la soluzione come risposta e accettarla. – U62

risposta

3

Richiede SQLite? Sono alle prese con un problema simile e ho riscontrato che tutto funziona come previsto con un archivio binario
Esistono limitazioni nell'utilizzo di SQLite come negozio, sebbene non abbia ancora trovato un documento che elenchi il limitazioni, solo che esistono

Scusate, non posso esservi di più aiuto.

+0

Sì, funziona con un archivio binario. Ho usato un db SQL lite perché sembra essere più veloce nel mio caso. dimensioni vicine a 5 MB (su iPhone). Il tempo di caricamento dell'app è <1sec per sqlite dove è vicino a 2 sec per binary store. – Mugunth

+1

I foudn la risposta però ... NSPredicate * predicate = [NSPredicate predicateWithFormat: @ "tag IN% @", predicati]; [fetchRequest setPredicate: predicato]; dovrebbe essere cambiata a NSPredicate * predicato = [NSPredicate predicateWithFormat: @ "ogni tag IN% @", predicati]; [fetchRequest setPredicate: predicato ]; – Mugunth

+1

Buono a sapersi - è strano, il tuo messaggio è molto simile ao ne ho avuto, eppure il mio è dovuto a una limitazione di Core Data con SQLite. Sapere di capire come distinguere! – emp

Problemi correlati