Как запустить асинхронный процесс в NSOperation - PullRequest
3 голосов
/ 16 июля 2011

Мне нужно обновить некоторые данные из веб-сервиса через фоновый поток в приложении, над которым я работаю.

Обычно я просто делаю это через NSOperationQueue и синхронный веб-запрос в функции main () NSOperation.

Однако для этой конкретной выборки данных приложение требует использования OAuth, а используемая мной библиотека OAuthConsumer выполняет запрос к веб-службе через асинхронный запрос с обратными вызовами метода делегата для успеха / неудачи.

Моя проблема в том, что эти обратные вызовы делегатов, кажется, получают процессы, потому что (как я понимаю) мой рабочий процесс уничтожается / очищается, когда достигается конец функции main() и операция отключается от операции стек очереди.

Это точно?

Если так, есть ли решение сделать это через NSOperationQueue, и если нет, какова текущая наилучшая практика для получения данных через фоновый поток асинхронным способом, который может обрабатывать обратные вызовы делегата?

1 Ответ

1 голос
/ 16 июля 2011

Вы можете продолжить цикл выполнения, пока ваши операции не будут завершены. Что вы будете делать, так это запускать асинхронные операции и продолжать выполнять цикл выполнения, пока они не будут завершены. Флаг завершения будет переменной экземпляра, которую вы установите, когда все ваши асинхронные (OAuth) элементы будут выполнены.

complete = NO;
//Start async operations
while (!complete) {
    [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
}

...

-(void)completeCallback
{
    complete = YES;
}
...