Я только начал изучать программирование основных данных. Я попытался сделать пример, в котором есть табличное представление, которое отображает список лиц (свойства: имя, фамилия). В представлении таблицы используется NSFetchResultController для отображения списка лиц.Основные данные многопоточности и вложенные контексты
Я последовал за вложенную шаблон контексты следующим образом:
Корневой контекст (NSPrivateQueueConcurrencyType) < ---> Основной контекст (NSMainQueueConcurrencyType) < ---> Дети контексты (NSPrivateQueueConcurrencyType).
Контексты для детей используются для выполнения огромной вставки/выборки (с помощью метода perormBlock:). Когда я пытаюсь выполнить огромную вставку (около 5000 строк), сохраните дочерний контекст, а затем главный контекст, а затем корневой контекст, я вижу, что мой пользовательский интерфейс заблокирован до завершения сохранения.
Может ли кто-нибудь рассказать мне, какое лучшее решение принять, чтобы сделать приложение-исполнитель? Может ли кто-нибудь указать мне хороший простой код, который показывает, как сделать огромную выборку/вставку в фоновом режиме, не блокируя пользовательский интерфейс?
[_indicator startAnimating];
NSManagedObjectContext *aContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
aContext.parentContext = [[SDCoreDataController sharedInstance] mainManagedObjectContext];
[aContext performBlock:^{
NSError *error;
for (int i = 0; i < 5000; i++)
{
FootBallCoach *backgroundCoach = [NSEntityDescription insertNewObjectForEntityForName:@"FootBallCoach" inManagedObjectContext:aContext];
backgroundCoach.firstName = [NSString stringWithFormat:@"José %i",i];
backgroundCoach.lastName = [NSString stringWithFormat:@"Morinho %i",i];
backgroundCoach.cin = [NSString stringWithFormat:@"%i",i];
if (i % 50 == 0)
{
[aContext save:&error];
[aContext reset];
}
}
[[SDCoreDataController sharedInstance] saveMainContext];
[[SDCoreDataController sharedInstance] saveRootContext];
dispatch_async(dispatch_get_main_queue(), ^{
[_indicator stopAnimating];
[self refreshCoaches:nil];
});
}];
https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreData/Concurrency.html –