AFNetwork,Magical Record和块保存在块内

时间:2014-03-17 19:19:48

标签: objective-c nsmanagedobjectcontext magicalrecord afnetworking-2

我使用AFNetworking获取远程数据,并使用魔法记录导入并在本地保存。

基本上,我在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];

所以这个问题来自于我正在调用" saveToPersistentStoreWithCompletion"在" completionBlock"。

如果我使用" saveToPersistentStoreAndWait"相反,它有效,但我不知道保存是否成功。

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

1 个答案:

答案 0 :(得分:0)

我对AFNetworking 2.0并不熟悉,但是这个代码可能会多次保存并保存多次?

在完成所有batchedOperations后保存一次会不会更好?