Разница между получением объекта с помощью FetchResultController и managedObjectContext

StackOverflow https://stackoverflow.com/questions/2548518

Вопрос

В чем разница между получением элементов из Core Data с помощью FetchResultController или 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) Управляемый объект Context

NSFetchRequest *request = [[NSFetchRequest alloc] init]; 
[request setEntity:[NSEntityDescription entityForName:@"Item"  inManagedObjectContext:managedObjectContext]]; 
NSError *error = nil; 
NSArray *items = [ managedObjectContext executeFetchRequest:request error:&error]; 
Это было полезно?

Решение

Смысл использования NSFetchedResultsController в отличие от просто NSFetchRequest это мониторинг ваших данных и удобные методы при работе с разделами.

Когда имеешь дело только с NSFetchRequest вы должны сами определить разделы, и вам нужно повторно извлекать свои данные, когда что-то меняется.

Когда имеешь дело с NSFetchedResultsController, он определит ваши разделы, кэширует результаты (делая второй запрос для этих данных почти мгновенным) и предоставит удобные методы для вашего NSTableView.Наконец, когда ваши данные изменяются, NSFetchedResultsController уведомит вас через своих делегатов.

Внутренние данные для обоих из них будут одинаковыми.Разница заключается в управлении состоянием этих данных.

Другие советы

В NSFetchedResultsController объект сообщит вам, когда объекты вашего запроса изменятся.Просто предоставьте объект делегата для приема вызовов (см. Документ для NSFetchedResultsControllerDelegate протокол).Он также предоставляет вам управление разделами, что полезно, если вы хотите отобразить данные в табличном виде.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top