出于测试目的,我有以下代码从主线程调用(在viewDidLoad
方法中)。
for (int i = 0; i < 50; i++) {
[MagicalRecord saveWithBlock:^(NSManagedObjectContext * _Nonnull localContext) {
[FieldDescription MR_createEntityInContext:localContext];
} completion:^(BOOL contextDidSave, NSError * _Nullable error) {
if (!contextDidSave) {
DDLogError(@"Error saving field description: %@", error.localizedDescription);
}
}];
}
在结果中,部分实体保存已使用contextDidSave == YES
完成,但其他不是因为结果为contextDidSave == NO && error == nil
。对于这些实体,我在日志中从MagicalRecord获得以下消息:
NO CHANGES IN ** MagicalRecord Root Saving Context ** CONTEXT - NOT SAVING
为什么我不能用MagicalRecord做这些事情,我缺少什么?
我知道,如果我将所有50个电话放在saveWithBlock
内,它会起作用,但我现在的架构不会允许我这样做,因为我从异步中进行了大量的魔术记录调用操作
UPD:
在进行更多测试时,我发现所有实体最终都保存在存储中,尽管有MagicalRecord saveWithBlock:
次操作的一半已完成contextDidSave == NO
和error == nil
结果。无论如何,我不能依靠保存操作的结果来使我的系统可靠。
我失踪了什么,如何在没有这种奇怪行为的情况下实现这一目标?