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]; 
Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top