dispatch_group_leave никогда не вызывается в контексте управляемого объекта executeBlock API
У меня есть приложение на основе основных данных, теперь попробуйте использовать NSManagedObjectContext
блочный API. Контекст является частным типом очереди, поставьте в очередь асинхронный блок для вставки и сохранения объектов, но перед продолжением выполнения мне нужно дождаться завершения сохранения, поэтому создайте dispatch group
объект для мониторинга, но dispatch_group_leave
никогда не вызывается после операции сохранения в блоке, dispatch_group_wait
не вернусь, это странно. И если я удалю save
метод, это будет вызвано, если добавить dispatch group
, save
метод, кажется, никогда не будет возвращен, также нет никакой информации журнала ошибок.
Мой тестовый пример кода:
__block dispatch_group_t group = dispatch_group_create();
dispatch_group_enter(group);
[self.privateContext performBlock:^{
for (int i = 0; i <= 100; i++)
{
Tester *t = [NSEntityDescription insertNewObjectForEntityForName:@"Tester" inManagedObjectContext:self.privateContext];
t.timestamp = [NSDate date];
t.identifier = [@(i) stringValue];
}
NSError *er2 = nil;
if (![self.privateContext save:&er2])
NSLog(@"%@", er2);
dispatch_group_leave(group);
}];
dispatch_group_wait(group, DISPATCH_TIME_FOREVER);