我有一个基于核心数据的应用,现在尝试使用基于NSManagedObjectContext
块的API。上下文是私有队列类型,为插入和保存对象排队异步块,但在继续执行之前,我需要等待save完成,因此创建一个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);