MagicalRecord 触发器完成块太早

MagicalRecord trigger completion block too early

昨天我 ,它确实解决了我当时的问题。 Hoverever 现在我又遇到了同样的问题,但是有了新的实现。添加更多要导入的数据后,我现在又遇到了同样的问题。但是这次我的 saveAndWait 的完成块似乎在完成之前就被触发了。

JSON api 包含更多数据,而不是代码本身。

这是我当前的代码:

[MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext) {

    NSDictionary *jsonData = [responseObject valueForKey:@"responses"];
    [User importFromObject:jsonData inContext:localContext];

    NSArray *orders = [responseObject valueForKeyPath:@"responses.orders"];
    [Order importFromArray:orders inContext:localContext];

} completion:^(BOOL success, NSError *error) {
    if(error) {
        NSLog(@"Failed to save data");
        return;
    }
    NSLog(@"Saving done.");
    successful(@"Some text");
}];

如前所述,代码中没有任何变化,只有接收到的数据。

日志显示 "saving done" 在所有保存完成之前被调用。这是我导入或保存数据的唯一地方。

2015-05-06 14:55:57.261 xxxx[43159:9057742] +[NSManagedObjectContext(MagicalRecord) MR_contextWithStoreCoordinator:](0xfeea04) -> Created Context UNNAMED
2015-05-06 14:55:57.262 xxxx[43159:9057742] +[NSManagedObjectContext(MagicalRecord) MR_setRootSavingContext:](0xfeea04) Set Root Saving Context: <NSManagedObjectContext: 0x7ae6cb20>
2015-05-06 14:55:57.263 xxxx[43159:9057742] +[NSManagedObjectContext(MagicalRecord) MR_newMainQueueContext](0xfeea04) Created Main Queue Context: <NSManagedObjectContext: 0x7ae73ee0>
2015-05-06 14:55:57.263 xxxx[43159:9057742] +[NSManagedObjectContext(MagicalRecord) MR_setDefaultContext:](0xfeea04) Set Default Context: <NSManagedObjectContext: 0x7ae73ee0>
2015-05-06 14:55:58.915 xxxx[43159:9057742] POST 'xxxx'
2015-05-06 14:55:59.939 xxxx[43159:9057742] 200 'xxxx' [1.0249 s]
2015-05-06 14:55:59.957 xxxx[43159:9057742] POST 'xxxx'
2015-05-06 14:56:00.702 xxxx[43159:9057742] 200 'xxxx' [0.7454 s]
2015-05-06 14:56:10.534 xxxx[43159:9058195] -[NSManagedObjectContext(MagicalSaves) MR_saveWithOptions:completion:](0x7af24cb0) → Saving <NSManagedObjectContext (0x7af24cb0): *** UNNAMED ***> on *** BACKGROUND THREAD ***
2015-05-06 14:56:10.535 xxxx[43159:9058195] -[NSManagedObjectContext(MagicalSaves) MR_saveWithOptions:completion:](0x7af24cb0) → Save Parents? 1
2015-05-06 14:56:10.535 xxxx[43159:9058195] -[NSManagedObjectContext(MagicalSaves) MR_saveWithOptions:completion:](0x7af24cb0) → Save Synchronously? 0
2015-05-06 14:56:10.541 xxxx[43159:9058195] -[NSManagedObjectContext(MagicalRecord) MR_contextWillSave:](0x7af24cb0) Context UNNAMED is about to save. Obtaining permanent IDs for new 2 inserted objects
2015-05-06 14:56:10.750 xxxx[43159:9058195] -[NSManagedObjectContext(MagicalSaves) MR_saveWithOptions:completion:](0x7ae6cb20) → Saving <NSManagedObjectContext (0x7ae6cb20): *** BACKGROUND SAVING (ROOT) ***> on *** BACKGROUND THREAD ***
2015-05-06 14:56:10.750 xxxx[43159:9058195] -[NSManagedObjectContext(MagicalSaves) MR_saveWithOptions:completion:](0x7ae6cb20) → Save Parents? 1
2015-05-06 14:56:10.750 xxxx[43159:9058195] -[NSManagedObjectContext(MagicalSaves) MR_saveWithOptions:completion:](0x7ae6cb20) → Save Synchronously? 0
2015-05-06 14:56:16.200 xxxx[43159:9058195] -[NSManagedObjectContext(MagicalRecord) MR_contextWillSave:](0x7ae6cb20) Context BACKGROUND SAVING (ROOT) is about to save. Obtaining permanent IDs for new 2 inserted objects
2015-05-06 14:56:16.232 xxxx[43159:9058195] __70-[NSManagedObjectContext(MagicalSaves) MR_saveWithOptions:completion:]_block_invoke21(0x7ae6cb20) → Finished saving: <NSManagedObjectContext (0x7ae6cb20): *** BACKGROUND SAVING (ROOT) ***> on *** BACKGROUND THREAD ***
2015-05-06 14:56:16.233 xxxx[43159:9057742] Saving done.
2015-05-06 14:56:16.233 xxxx[43159:9057742] All data has been setup sucessfully
2015-05-06 14:56:16.255 xxxx[43159:9057742] Perform Segue To LoginSucessSegue from LoginViewController
2015-05-06 14:56:36.208 xxxx[43159:9057742] No data found. Show pull down to refresh
2015-05-06 14:56:36.208 xxxx[43159:9057742] No data found. Show pull down to refresh
2015-05-06 14:56:36.210 xxxx[43159:9057742] No data found. Show pull down to refresh
2015-05-06 14:56:36.211 xxxx[43159:9057742] No data found. Show pull down to refresh
2015-05-06 14:56:45.083 xxxx[43159:9058146] -[NSManagedObjectContext(MagicalSaves) MR_saveWithOptions:completion:](0x7ae3b550) → Saving <NSManagedObjectContext (0x7ae3b550): *** UNNAMED ***> on *** BACKGROUND THREAD ***
2015-05-06 14:56:45.083 xxxx[43159:9058146] -[NSManagedObjectContext(MagicalSaves) MR_saveWithOptions:completion:](0x7ae3b550) → Save Parents? 1
2015-05-06 14:56:45.084 xxxx[43159:9058146] -[NSManagedObjectContext(MagicalSaves) MR_saveWithOptions:completion:](0x7ae3b550) → Save Synchronously? 0
2015-05-06 14:56:45.084 xxxx[43159:9058146] -[NSManagedObjectContext(MagicalRecord) MR_contextWillSave:](0x7ae3b550) Context UNNAMED is about to save. Obtaining permanent IDs for new 9 inserted objects
2015-05-06 14:56:45.087 xxxx[43159:9058146] -[NSManagedObjectContext(MagicalSaves) MR_saveWithOptions:completion:](0x7ae6cb20) → Saving <NSManagedObjectContext (0x7ae6cb20): *** BACKGROUND SAVING (ROOT) ***> on *** BACKGROUND THREAD ***
2015-05-06 14:56:45.087 xxxx[43159:9058146] -[NSManagedObjectContext(MagicalSaves) MR_saveWithOptions:completion:](0x7ae6cb20) → Save Parents? 1
2015-05-06 14:56:45.091 xxxx[43159:9058146] -[NSManagedObjectContext(MagicalSaves) MR_saveWithOptions:completion:](0x7ae6cb20) → Save Synchronously? 0
2015-05-06 14:56:45.093 xxxx[43159:9060610] -[NSManagedObjectContext(MagicalRecord) MR_contextWillSave:](0x7ae6cb20) Context BACKGROUND SAVING (ROOT) is about to save. Obtaining permanent IDs for new 9 inserted objects
2015-05-06 14:56:45.096 xxxx[43159:9060610] __70-[NSManagedObjectContext(MagicalSaves) MR_saveWithOptions:completion:]_block_invoke21(0x7ae6cb20) → Finished saving: <NSManagedObjectContext (0x7ae6cb20): *** BACKGROUND SAVING (ROOT) ***> on *** BACKGROUND THREAD ***

是因为不允许我在 saveWithBlock 中导入和保存多个实体还是发生了什么? - 我想不通。

解决方案是将 MagicalRecord 更新到最新的测试版。当问这个问题时,我的项目是 运行 版本 2.2(一个 "stabil" 版本),现在是 v2.3.0-beta 5, 解决了我的问题。

相关问题可以在这里找到:https://github.com/magicalpanda/MagicalRecord/issues/1003