2009-10-17 8 views
0

Je travaille avec un NSFetchedResultsController dont le fetchRequest a un prédicat. Cependant, il semble que la requête ne me donne pas de groupements cohérents chaque fois que je l'exécute.Groupe de sections non cohérent lors de l'utilisation de NSFetchedResultsController

J'ai défini le 'sectionNameKeyPath' pour le NSFetchedResultsController et j'obtiens un nombre différent de sections retournées selon que j'ai travaillé avec l'objet racine immédiatement avant d'exécuter le fetch. Parfois, je reçois 3 sections et d'autres fois, il renvoie 1 section, le résultat attendu.

Comment je crée le FetchRequestController:

// Create the fetch request for the entity. 
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 

// Configure the request's entity and its predicate.   
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Employee" 
inManagedObjectContext:context]; 
[fetchRequest setEntity:entity]; 

// The predicate to find all employees associated with a Group 
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY SELF.groups IN %@", 
         [division groups]]; 

[fetchRequest setPredicate:predicate]; 

// Sort based on create date and time 
NSSortDescriptor *createDateSortDcptor = [[NSSortDescriptor alloc] initWithKey:@"createDateTime" ascending:YES]; 

NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:createDateSortDcptor, nil]; 

[fetchRequest setSortDescriptors:sortDescriptors]; 

// should be grouped by the 'Group' employee belongs to. 
NSFetchedResultsController *controller = 
    [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest 
     managedObjectContext:context 
     sectionNameKeyPath:@"groups" 
     cacheName:@"Root"];     

Mon modèle d'objet est le même qui a été décrit dans cette autre question:

https://stackoverflow.com/questions/1580236/how-to-setup-a-predicate-for-this-query est-il un moyen de vous assurer que je reçois le regroupement cohérent chaque fois?

Répondre

1

Il se trouve que c'est simple à faire:

NSFetchedResultsController *controller = 
    [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest 
     managedObjectContext:context 
     sectionNameKeyPath:@"groups.name" 
     cacheName:@"Root"]; 

Je ne savais pas que je pouvais joins 2e noms de propriétés de niveau dans le « sectionNameKeyPath »

+0

Si tel est la solution alors pls. Acceptez la réponse aussi :) –

Questions connexes