2010-04-25 2 views
0

Je suis coincé dans un problème et après 2 jours de recherche, j'ai trouvé une solution, mais je n'ai pas compris pourquoi cela fonctionne.NSFetchedResultsController n'a pas renvoyé de données

D'abord, je suis initialisés NSFetchedResultsController en utilisant le code suivant (il ressemble à beaucoup de généré automatiquement):

- (NSFetchedResultsController *)fetchedResultsController { 

if (fetchedResultsController != nil) 
    return fetchedResultsController; 

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Profile" 
              inManagedObjectContext:self.managedObjectContext]; 
[fetchRequest setEntity:entity]; 
[fetchRequest setFetchBatchSize:20]; 

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"lastName" ascending:YES]; 
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil]; 
[fetchRequest setSortDescriptors:sortDescriptors]; 

NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] 
                 initWithFetchRequest:fetchRequest 
                 managedObjectContext:self.managedObjectContext 
                 sectionNameKeyPath:nil 
                 cacheName:@"Root"]; 
aFetchedResultsController.delegate = self; 
self.fetchedResultsController = aFetchedResultsController; 
NSError *error = nil; 
//[aFetchedResultsController performFetch:&error]; 

[aFetchedResultsController release]; 
[fetchRequest release]; 
[sortDescriptor release]; 
[sortDescriptors release]; 

return fetchedResultsController; 

}

Jetez un oeil à la chaîne commenté - il n'y avait pas de ces chaînes et quand j'ai demandé des données - je n'ai pas eu (et il était là!). Quand j'ai décommenté cette ligne, ça commence à fonctionner. Cela semble évident, mais tous les exemples que j'ai vus auparavant n'avaient pas cette ligne. Et ils travaillent. Comment ça peut être? Je veux juste savoir ce que je fais mal.

Répondre

3

[aFetchedResultsController performFetch:&error]; doit être appelée à un moment donné pour que les données soient récupérées. Les exemples ont probablement récupéré les données à un autre endroit que l'accesseur (c'est bien dans l'accesseur, cependant).

+0

Vous avez raison! C'est fait dans viewDidLoad .. Comment pourrais-je le manquer ... :( –

Questions connexes