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);

0 ответов

Другие вопросы по тегам