Как поменять задачи в фоновом потоке, который должен сделать обратный вызов - PullRequest
1 голос
/ 11 февраля 2012

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

Если все ответы получены и выполнены, другой поток должен вызвать делегата на моем ViewController.

Можете ли вы дать мне несколько советов и подсказок, как это реализовать?

Ответы [ 2 ]

2 голосов
/ 11 февраля 2012

Вы можете сделать это с помощью NSURLConnection, но код довольно сложный.

Я написал простой класс для выполнения асинхронных веб-запросов в фоновом потоке.Вы можете найти его здесь: https://github.com/nicklockwood/RequestQueue

Он работает аналогично NSOperationQueue, который предложил jsd (вы можете использовать его с NSOperationQueue, если хотите), но я думаю, что вам будет прощеиспользовать.

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

NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://someurl?foo=bar"]];
[[RequestQueue mainQueue] addRequest:request completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {

    //do something with the response

}];

Поскольку он использует блоки, вам не нужно создавать метод делегата,Вы можете просто поместить свой код обработки прямо в обратный вызов (где я поместил комментарий «сделать что-то с ответом»).

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

0 голосов
/ 11 февраля 2012

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

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