MagicalRecord saveWithBlock 问题

Posted

技术标签:

【中文标题】MagicalRecord saveWithBlock 问题【英文标题】:MagicalRecord saveWithBlock issue 【发布时间】:2014-02-28 11:59:33 【问题描述】:

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

据我了解,当创建所有核心数据条目时,将调用以下代码的完成块?我对吗?因为当我尝试在另一个控制器中查找所有实体时,我希望创建所有条目。但是 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
];

【问题讨论】:

【参考方案1】:

magic record 2.2 版本中存在一个似乎无法保存导入的错误。尝试使用 2.1 版。

【讨论】:

我们已经为 2.3 版本的数据导入代码做了大量工作——请您试一试,看看问题是否得到解决?如果没有,请在问题跟踪器上指出我的问题,我会看看修复它。谢谢! @TonyArnold:我正在使用版本2.3.2,但仍然遇到此问题。任何的想法?我想提一下我在 Swift 项目中使用的。【参考方案2】:

试试这个:

[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 遍历您的数组:您可以保证只有在所有保存完成后才会调用您的完成块。

【讨论】:

以上是关于MagicalRecord saveWithBlock 问题的主要内容,如果未能解决你的问题,请参考以下文章

在并发 NSOperation (MagicalRecord-2.3) 中使用 MagicalRecord 的正确方法

MagicalRecord:后台保存

未找到 MagicalRecord/MagicalRecordDeprecationMacros.h 文件

WatchKit 和 MagicalRecord - 这可能吗?

MagicalRecord 3.0 设置

MagicalRecord 日期解析