Diferença entre objeto Get usando o FetchResultController e ManagedObjectContext
Pergunta
Qual é a diferença entre os elementos Get dos dados principais com o FetchResultController ou 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];
Solução
O ponto por trás do uso de um NSFetchedResultsController
ao contrário de apenas um NSFetchRequest
é o monitoramento de seus dados e os métodos de conveniência ao trabalhar com seções.
Ao lidar com apenas um NSFetchRequest
Você deve determinar as seções e precisa reformar seus dados quando algo mudar.
Ao lidar com o NSFetchedResultsController
, ele determinará suas seções, cache os resultados (fazendo uma segunda solicitação para esses dados quase instantâneos) e fornecerá métodos de conveniência para o seu NStableView. Finalmente, quando seus dados mudam, o NSFetchedResultsController
o notificará através de seus delegados.
Os dados internos para ambos serão os mesmos. Está gerenciando o estado desses dados que é a diferença.
Outras dicas
o NSFetchedResultsController
O objeto dirá quando os objetos da sua consulta mudarem. Basta fornecer um objeto delegado para receber as chamadas (consulte o documento para NSFetchedResultsControllerDelegate
protocolo). Ele também fornece o gerenciamento de seção que é útil se você deseja exibir os dados em uma exibição de tabela.