Я использую AFNetworking для извлечения удаленных данных и Magical Record для их локального импорта и сохранения.
По сути, я вызываю волшебное сохранение записи с блоком в блоке завершения из метода 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», это работает, но тогда я не узнаю, было ли сохранение успешным или нет.
Как правильно вложить эти операции?