Pregunta

¿Cuál es la diferencia entre los elementos de obtener datos básicos con FetchResultController o 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]; 
¿Fue útil?

Solución

El punto detrás de usar un NSFetchedResultsController en lugar de sólo una NSFetchRequest es el seguimiento de los datos y los métodos de conveniencia cuando se trabaja con secciones.

Cuando se trata de sólo un NSFetchRequest usted tiene que determinar las secciones de sí mismo y necesita refetch sus datos cuando algo cambia.

Cuando se trata de la NSFetchedResultsController, que determinará sus secciones, caché de los resultados (que hacen una segunda solicitud de que los datos de cerca instantánea), y proporcionar métodos de conveniencia para su NSTableView. Por último, cuando los cambios de sus datos, el NSFetchedResultsController le notificará a través de sus delegados.

Los datos internos para ambos de estos va a ser la misma. Es la gestión del estado de que los datos que son la diferencia.

Otros consejos

El objeto NSFetchedResultsController le dirá cuando los objetos de su cambio de consulta. Simplemente proporcione un objeto delegado para recibir las llamadas (véase el documento de protocolo NSFetchedResultsControllerDelegate). También le proporcionan la gestión de la sección que es útil si desea mostrar los datos en una vista de tabla.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top