Objective c AFN网络、魔法记录和区块内的区块保存

Objective c AFN网络、魔法记录和区块内的区块保存,objective-c,nsmanagedobjectcontext,magicalrecord,afnetworking-2,Objective C,Nsmanagedobjectcontext,Magicalrecord,Afnetworking 2,我正在使用AFNetworking获取远程数据,并使用Magic Record在本地导入和保存数据 基本上,我用一个块调用Magic record save,在AFNetworking方法的完成块内,这会导致我的单元测试永远挂起 这是同步方法的代码。它在SyncEngine类中定义,用作单例 NSArray *operations = … ; // An array of AFHTTPRequestOperation defined before __block BOOL syncSuccess

我正在使用AFNetworking获取远程数据,并使用Magic Record在本地导入和保存数据

基本上,我用一个块调用Magic record save,在AFNetworking方法的完成块内,这会导致我的单元测试永远挂起

这是同步方法的代码。它在SyncEngine类中定义,用作单例

NSArray *operations = … ; // An array of AFHTTPRequestOperation defined before
__block BOOL syncSuccess = … ; // Set by operations
__block NSDictionary *syncErrors = … ; // Set by operations

NSArray *batchedOperations =
    [AFURLConnectionOperation batchOfRequestOperations:operations
                                         progressBlock:^(NSUInteger numberOfFinishedOperations, NSUInteger totalNumberOfOperations) {
                                             // …
                                         }
                                       completionBlock:^(NSArray *operations) {
                                           NSMutableDictionary *allErrors = [NSMutableDictionary dictionaryWithDictionary:syncErrors];
                                           [_localContext saveToPersistentStoreWithCompletion:^(BOOL success, NSError *error){
                                               if (!success && error)
                                                   allErrors[@"MR_saveToPersistentStore"] = error;
                                               syncCompletionBlock(syncSuccess && success, allErrors);
                                           }];
                                       }
     ];

    // _manager is a AFHTTPRequestOperationManager
    [_manager.operationQueue addOperations:batchedOperations waitUntilFinished:YES];
因此,问题在于我在“completionBlock”中调用“saveToPersistentStoreWithCompletion”

如果我改为使用“saveToPersistentStoreAndWait”,它可以工作,但是我不知道保存是否成功


嵌套这些操作的正确方法是什么?

我不熟悉AFNetworking 2.0,但该代码不会多次调用save吗


完成所有batchedOperations后保存一次不是更好吗?

不是这样,在每个操作后调用progressBlock,但在完成所有batchedOperations后调用completionBlock一次。