2009-05-29 8 views
10

Mon graphique d'objet est simple.Données de base NSPredicate pour les relations

J'ai un objet feedentry qui stocke des informations sur les flux RSS et une relation appelée Tag qui lie à l'objet "TagValues". Les deux la relation (to et inverse) sont to-many. c'est-à-dire qu'un flux peut avoir plusieurs étiquettes et qu'une étiquette peut être associée à plusieurs flux.

J'ai fait référence à How to do Core Data queries through a relationship? et j'ai créé une requête NSFetchRequest. Mais quand récupérer les données, je reçois une exception indiquant,

NSInvalidArgumentException inappliquées génération SQL pour prédicat

Que dois-je faire? Je suis un débutant aux données de base :(Je sais que je l'ai fait quelque chose de terriblement mal ... S'il vous plaît aider ...

Merci

-

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

après une partie de votre code afin que nous puissions avoir un meilleur look – catsby

+0

Mungunth, il semblerait que vous oubliez de définir l'entité du fetchRequest après avoir redéfini le prédicat sur 'tag IN predicates'. Si ce n'est pas le problème, s'il vous plaît également poster une photo du modèle d'objet et je peux vous donner un peu plus de conseils. –

+0

Mugunth> Vous devez ajouter votre solution en guise de réponse et l'accepter. – U62

Répondre

3

Avez-vous besoin de SQLite? Je suis aux prises avec un problème similaire, et j'ai constaté que tout fonctionne comme prévu avec un magasin binaire
Il existe des limitations lors de l'utilisation de SQLite en tant que magasin, même si je n'ai pas encore trouvé de document limitations, seulement qu'ils existent.

Désolé je ne peux pas être plus utile.

+0

Oui, cela fonctionne avec un magasin binaire.J'ai utilisé un sql lite sql car il semble être plus rapide dans mon cas.Je traite des données de Le temps de chargement de l'application est <1sec pour sqlite où il est proche de 2 sec pour le stockage binaire – Mugunth

+1

Je trouve la réponse si ... NSPredicate * predicate = [NSPredicate predicateWithFormat: @ "tag IN% @ », prédicats]; [fetchRequest setPredicate: prédicat]; devrait être remplacé NSPredicate * prédicat = [NSPredicate predicateWithFormat: @ "toute balise IN% @", prédicats]; [fetchRequest setPredicate: prédicat – Mugunth

+1

Bon à savoir - c'est étrange, votre message est très similaire à o J'ai eu, et pourtant le mien est dû à une limitation de Core Data avec SQLite. Savoir pour comprendre comment faire la différence! – emp

Questions connexes