Несколько асинхронных URL-запросов - PullRequest
0 голосов
/ 10 апреля 2011

Мое приложение iPhone «зависало» или, скорее, «зависало», когда оно выходило за стартовый экран.Я думаю, что это связано с тем, что регистрация удаленных push-уведомлений отправляется как синхронный запрос, и поэтому я хотел бы изменить это на асинхронный.Это проблема, так как я уже отправляю один асинхронный запрос на получение некоторых данных и сохранение их на телефоне.Итак, я хотел бы отправить оба эти запроса асинхронно и сделать, чтобы они сделали две разные вещи в - (void)connectionDidFinishLoading:(NSURLConnection *)connection.Поэтому мне нужно знать, какое из двух соединений завершилось.

Есть ли способ сделать это?Будет ли какой-нибудь способ отличить по URL готового соединения?На самом деле, я думал, что это будет так же просто, как установить tag и проверить это в - (void)connectionDidFinishLoading:(NSURLConnection *)connection, но это кажется невозможным.

Кто-нибудь знает, как я могу это сделать?

Ответы [ 3 ]

2 голосов
/ 10 апреля 2011

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

Однако, если вы по какой-то причине должны сделать 2 NSURLConnections с одним и тем же делегатом, вам нужно сохранить ссылки на них обоих в классе ivars. Что-то вроде NSURLConnection * pushNotificationConnection; и NSURLConnection * someOtherConnection;

Тогда ваша функция didReceiveData должна выглядеть примерно так:

-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    if (connection == pushNotificationConnection)
    {
        // handle the push notification related data
    }
    else if (connection == someOtherConnection)
    {
        // handle the other connection
    }
}
0 голосов
/ 23 октября 2013
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
  if ([connection isEquals:pushNotificationConnection]) {
    // handle the push notification related data
  } else if ([connection isEquals:someOtherConnection]) {
    // handle the other connection
  }
}
0 голосов
/ 10 апреля 2011

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

Таким образом, у вас будет два класса, например PushNotificationRequestor и SomeLoader.Каждый из них будет создавать и поддерживать свои собственные отдельные запросы HTTP (или любого другого типа) и каждый из них будет иметь свои собственные отдельные методы connectionDidFinishLoading: и т. Д.

...