2010-10-17 8 views
0

Je commence avec le développement de l'iphone et je suis confronté à un problème avec les données de base.Problème de données de base

J'ai un modèle regroupant plusieurs entités telles que employé, projet, type de projet, etc. Au démarrage, je crée plusieurs entités que je persiste à travers le framework de données de base. Aucun problème.

Le problème se pose lorsque je souhaite afficher une liste de projets en se basant sur un onglet que l'utilisateur sélectionne à l'intérieur du UIToolbar. J'ai mis l'argument pour montrer chaque requête sql lancé (-com.apple.CoreData.SQLDebug 1) et ce qui est vraiment gênant est que la requête montrée dans la console me donne des résultats quand j'accède à la DB de mon côté à travers sqlite mais à partir des données de base, non, 0 lignes retourné ...

Quelqu'un at-il fait face à un problème similaire?

Voici le code utilisé pour récupérer la liste des projets:

NSArray* retVal = nil; 
NSError *error = nil; 

NSManagedObjectContext *moc = "context retrieved"; 
NSEntityDescription *entityDescription = [NSEntityDescription entityForName:@"Project" inManagedObjectContext:moc]; 
NSFetchRequest *request = [[[NSFetchRequest alloc] init] autorelease]; 
[request setEntity:entityDescription]; 
retVal = [moc executeFetchRequest:request error:&error]; 

NSLog(@"Project type: %@", [theProjType valueForKey:@"projectTypeName"]); 
NSLog(@"Employee number: %@", [theEmployee valueForKey:@"employeeNumber"]); 

NSPredicate *predicate = [NSPredicate predicateWithFormat: @"ANY myEmployees.employeeNumber = %d AND myProjectType.projectTypeName = %d", [theEmployee valueForKey:@"employeeNumber"], [theProjType valueForKey:@"projectTypeName"]]; 
[request setPredicate:predicate]; 
retVal = [moc executeFetchRequest:request error:&error]; 

Ce code génère cette requête SQL (qui renvoie des résultats lors de son lancement sur le sqlite db):

SELECT DISTINCT 0, t0.Z_PK, t0.Z_OPT, t0.ZPROJECTNUMBER, t0.ZISEDITABLE, t0.ZPROJECTNAME, t0.ZISDELETABLE, t0.ZPROJECTEND, t0.ZPROJECTID, t0.ZPROJECTSTART, t0.ZCUSTOMERORDERNR, t0.ZMYCUSTOMER, t0.ZMYCOSTCENTRE, t0.ZMYPROJECTTYPE, t0.ZMYTRAVELTIMES FROM ZPROJECT t0 JOIN Z_4MYPROJECTS t1 ON t0.Z_PK = t1.Z_10MYPROJECTS1 JOIN ZEMPLOYEE t2 ON t1.Z_4MYEMPLOYEES = t2.Z_PK JOIN ZPROJECTTYPE t3 ON t0.ZMYPROJECTTYPE = t3.Z_PK WHERE (t2.ZEMPLOYEENUMBER = ? AND t3.ZPROJECTTYPENAME = ?) 
+0

Il serait utile de publier le code dans lequel vous avez configuré le NSFetchedResultsController et d'effectuer l'extraction. – Nimrod

+0

Merci pour la suggestion Nimrod, j'ai ajouté du code à ma question. –

Répondre

2
NSPredicate *predicate = [NSPredicate predicateWithFormat: @"ANY myEmployees.employeeNumber = %d AND myProjectType.projectTypeName = %d", [theEmployee valueForKey:@"employeeNumber"], [theProjType valueForKey:@"projectTypeName"]]; 

Etes-vous sûr que c'est correct? valueForKey: renvoie toujours un objet NSObject mais votre espace réservé est% d. Cela devrait créer un comportement étrange. Essayez% @ à la place

+0

Merci! Je me sens misérable de poser une question et le problème est si simple: S –

Questions connexes