Différence entre get objet en utilisant FetchResultController et ManagedObjectContext
Question
Quelle est la différence entre obtenir des éléments de données de base avec FetchResultController ou ManagedObjectContext ??
1) FetchResultController
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setEntity:[NSEntityDescription entityForName:@"Item" inManagedObjectContext: managedObjectContext]];
NSSortDescriptor *sortDescriptorNameAscending = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptorNameAscending,nil];
[fetchRequest setSortDescriptors:sortDescriptors];
[sortDescriptorNameAscending release];
NSFetchedResultsController *frc = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:managedObjectContext sectionNameKeyPath:nil cacheName:@"Lists"];
2) ManagedObjectContext
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:[NSEntityDescription entityForName:@"Item" inManagedObjectContext:managedObjectContext]];
NSError *error = nil;
NSArray *items = [ managedObjectContext executeFetchRequest:request error:&error];
La solution
Le point derrière l'aide d'un NSFetchedResultsController
par opposition à juste un NSFetchRequest
est le contrôle de vos données et les méthodes de commodité lorsque vous travaillez avec des sections.
Lorsque vous traitez avec juste un NSFetchRequest
vous devez déterminer les sections vous-même et vous devez réextrayez vos données quand quelque chose change.
Lorsque vous traitez avec l'NSFetchedResultsController
, il déterminera vos sections, mettre en cache les résultats (faisant une deuxième demande de ces données quasi instantanée), et de fournir des méthodes pratiques pour votre NSTableView. Enfin, lorsque vos données changent, le NSFetchedResultsController
vous informera par ses délégués.
Les données internes à ces deux va être la même chose. Il gère l'état de ces données qui est la différence.
Autres conseils
L'objet NSFetchedResultsController
vous dira quand les objets de votre changement de requête. Il suffit de fournir un délégué pour recevoir les appels (voir le doc pour le protocole NSFetchedResultsControllerDelegate
).
Il vous offre également la gestion de la section qui est utile si vous souhaitez afficher les données dans une vue de tableau.