Вызывать функцию, только если другая функция готова - PullRequest
0 голосов
/ 30 августа 2011

Как я могу убедиться в Objective-C, что функция вызывается только до тех пор, пока не будет готова другая функция?

Обновление:

-(void)reloadJsonFromServer {
    [[Sync sharedObject] synchronise];
    [self reload];
}

У меня есть эта функция. Вторая функция «reload» должна вызываться только в том случае, если первая функция - в данном случае это синглтон - готова. Готов означает, что первая функция больше не работает.

Ответы [ 3 ]

2 голосов
/ 30 августа 2011

То есть вы хотите дождаться завершения асинхронного метода? Существует множество способов сделать это.

  • Заставьте synchronise сам метод вызывать reload на вашем объекте, когда он завершит
  • dispatch_async метод reload и используйте его просто wait, пока другой метод не заполнит некоторый флаг или структуру данных, которые вы ожидаете, прежде чем продолжить (BOOL synchronised или аналогичный). Обратите внимание, что если ваш метод reload что-то делает с UIKit, то вам нужно запустить его в главном потоке.
  • Измените способ выполнения synchronise, чтобы он фактически не возвращался к вызывающей стороне, пока не завершится синхронизация, но затем dispatch_async метод reloadJsonFromServer.
  • Измените synchronise как в третьей точке, но вместо использования dispatch_async добавьте оба вызова метода к NSOperationQueue как NSOperation с, с reload, зависящим от завершения synchronise , Очередь операций будет обрабатывать ее после этого.

Это всего лишь несколько, я уверен, что другие люди могут предложить больше.

0 голосов
/ 18 сентября 2014

Немного поздно, но с NSNotification это может быть обработано.

NSNotificationCenter *center = [NSNotificationCenter defaultCenter];

[center addObserverForName:nil
                    object:nil
                     queue:nil
                usingBlock:^(NSNotification *notification)
{
     NSLog(@"%@", notification.name);
}];

Посмотрите на это: http://nshipster.com/nsnotification-and-nsnotificationcenter/

0 голосов
/ 31 августа 2011

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

Пользовательские события в Objective-C

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...