2014-02-28 41 views
1

我想实现的一件事 - 检测何时创建了所有实体并将其表示在我的表中。MagicalRecord saveWithBlock问题

正如我理解的正确,将创建所有核心数据条目时调用下面代码的完成块?我对吗?因为当我尝试在另一个控制器中查找所有实体时,我预计会创建所有条目。但findAll返回空数组。只有重装控制器解决了这个问题。

[MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext) { 
    NSArray *objects = responseData[@"data"]; 

    NSArray *array = [Team MR_importFromArray:objects inContext:localContext]; 

} completion:^(BOOL success, NSError *error) { 
    operationSuccess(nil); // return me to controller that requested this block 
}]; 

回答

2

在2.2版本的魔法记录中存在一个错误,似乎并没有节省进口。尝试使用版本2.1。

+0

我们已经为2.3版本的数据导入代码做了很多工作 - 请问您是否可以试试看问题是否已解决?如果没有,请在问题跟踪器上针对此问题指出我的问题,然后我会查看解决问题的方法。谢谢! –

+0

@TonyArnold:我使用的是'2.3.2'版本,但仍然遇到这个问题。任何想法?我想提一下,我正在使用Swift项目。 –

1

相反,试试这个:

[MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext) { 

    for(NSDictionary *dictionary in objects) { 
     [Team MR_importFromObject:dictionary inContext:localContext]; 
    } 
} completion:^(BOOL success, NSError *error) { 

    NSArray *array = [NSArray arrayWithArray:[Team MR_findAll]]; 
    operationSuccess(array); 
} 

有一个已知的问题与saveWithBlockimportFromArray,所有的数据被保存之前完成块被解雇(因此,为什么你没有看到他们回来马上 - 见https://github.com/magicalpanda/MagicalRecord/issues/642#issuecomment-40002145)。通过迭代你的数组importFromObject:inContext:你保证你的完成块只会在所有保存完成后才会被调用。