2016-03-22 2 views
0

У меня есть 3 функции в моем коде. Код, который я сделал для управления очередью для выполнения функции.Как вызвать вторую функцию после завершения первой функции?

[self firstMethodWithOnComplete:^{ 
    [self SecongMethodWithOnComplete:^{ 
     dispatch_async(dispatch_get_main_queue(), ^{ 
      [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(CallThirdMethod) userInfo:nil repeats:NO]; 
      }); 
    }]; 
}]; 

Первый и Второй Функция

- (void)firstMethodWithOnComplete:(void (^)(void))onComplete { 
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ 
    //processing here..... 

    [self CallFirstMethod]; 
    onComplete(); 
}); 
} 

- (void)SecongMethodWithOnComplete:(void (^)(void))onComplete { 
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ 
    //processing here..... 
    [self CallSecondMethod]; 
    onComplete(); 
}); 
} 

Проблема в том, я не в состоянии управлять их выполнением. Я хочу, чтобы порядок выполнения был таким, чтобы вторая функция выполнялась только в том случае, если первая завершена, а третий выполняется, если второе исполнение завершено. Пожалуйста, помогите мне решить эту проблему или дать соответствующие предложения.

+0

dispatch_async (dispatch_get_global_queue (DISPATCH_QUEUE_PRIORITY_DEFAULT, 0),^{ dispatch_async (dispatch_get_main_queue(),^{ NSLog (@ "DAIL изображения:% @", self.imageUrl); self.imgAppIcon.image = [UIImage imageWithData: [NSData dataWithContentsOfURL: [NSURL URLWithString: self.imageUrl]]]; }) ; }); – Birendra

+0

вы можете попробовать вот так: – Birendra

+0

Прочтите эту статью: http://stackoverflow.com/questions/7936570/objective-c-pass-block-as-parameter/27379471#27379471 Он показывает, как вызвать функцию (погрузка данные с веб-сайта), который затем вызывает вторую функцию после ее завершения. Он показывает, как передать функцию в качестве параметра. Это должно указывать на правильное направление. –

ответ

1

Вы можете использовать диспетчерские группы для такого рода требования, Ниже я отправляю пример кода, который я использовал

__block NSError *configError = nil; 
__block NSError *preferenceError = nil; 

// Create the dispatch group 
dispatch_group_t serviceGroup = dispatch_group_create(); 


dispatch_group_enter(serviceGroup); 
// Start the first async service 
dispatch_group_leave(serviceGroup); 


dispatch_group_enter(serviceGroup); 
// Start the second async service 
dispatch_group_leave(serviceGroup); 

dispatch_group_notify(serviceGroup,dispatch_get_main_queue(),^{ 
    //Update UI in this block of code 
}); 
+0

Что такое self.configService и self.preferenceService означает.? –

+0

его просто пример func block, который я сделал, и заменил ur код на то, что – Mukesh

+0

реализация выше кода дала мне эту ошибку ==> DB Ошибка: база данных заблокирована –

Смежные вопросы