2009-05-29 43 views
10

Mi gráfico de objetos es simple.Datos básicos NSPredicar para relaciones

Tengo un objeto feedentry que almacena información sobre feeds RSS y una relación llamada Tag que enlaza al objeto "TagValues". Tanto la relación (a y inversa) son a-muchos. es decir, un feed puede tener múltiples etiquetas y una etiqueta se puede asociar a múltiples feeds.

Me he referido a How to do Core Data queries through a relationship? y he creado un NSFetchRequest. Pero cuando obtener los datos, consigo una excepción indicando,

NSInvalidArgumentException sin aplicarse la generación de SQL para predicado

¿Qué debo hacer? Soy un novato de datos básicos :(Yo sé que he hecho algo muy malo ... Por favor, ayuda ...

Gracias

-

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

puesto algo de su código para que podamos tener un mejor aspecto – catsby

+0

Mungunth, parece que puede Olvídese de establecer la entidad de fetchRequest después de volver a establecer el predicado en 'etiqueta IN predicados'. Si este no es el problema, también publique una imagen del modelo de objetos y puedo darle un poco más de orientación. –

+0

Mugunth> Debe agregar su solución como respuesta y aceptarla. – U62

Respuesta

3

¿Necesita SQLite? Estoy lidiando con un problema similar, y he descubierto que todo funciona como se espera con una tienda binaria.
Existen limitaciones al usar SQLite como tienda, aunque todavía no he encontrado un documento que enumere el limitaciones, solo que ellos existen

Lo siento, no puedo ser de más ayuda.

+0

Sí, funciona con una tienda binaria. Utilicé un sql lite db, ya que parece ser más rápido en mi caso. Trato datos de tamaños cercanos a 5MB (en iPhone). El tiempo de carga de la aplicación es <1seg para sqlite donde está cerca de 2 segundos para la tienda binaria. – Mugunth

+1

No obstante, escuché la respuesta ... NSPredicate * predicate = [NSPredicate predicateWithFormat: @ "tag en% @", predicados]; [fetchRequest setPredicate: predicado]; debe cambiarse a NSPredicate * predicado = [NSPredicate predicateWithFormat: @ "cualquier etiqueta en% @", predicados]; [fetchRequest setPredicate: predicado ]; – Mugunth

+1

Es bueno saber - es extraño, su mensaje es muy similar a o ne tenía, y sin embargo, el mío se debe a una limitación de Core Data con SQLite. ¡Saber cómo descifrar la diferencia! – emp

Cuestiones relacionadas