dispatch_group_leave从未在托管对象上下文中调用performBlock API

时间:2014-08-15 19:04:12

标签: core-data objective-c-blocks grand-central-dispatch nsmanagedobjectcontext

我有一个基于核心数据的应用,现在尝试使用基于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);

0 个答案:

没有答案