iPhone: получить ответ на завершенный запрос [ASIHttpRequest]

Я пытаюсь использовать ASIHttpRequest с iPhone, чтобы получить некоторую информацию из API на основе строки запроса на моем сайте.

В настоящее время я нахожусь на стадии планирования своего дизайна и не могу понять, как мне действовать дальше.

Я хотел бы иметь класс, который будет обрабатывать все запросы, которые мне понадобятся. Я планирую, чтобы этот класс вызывали разные разделы приложения iPhone, а внутри класса я хотел бы запустить код ASIHttpRequest. Например:

  1. Я открою модальное окно для входа в систему.
  2. Это модальное представление вызовет функцию с пользователем / передаст классу API, который затем соберет URL-адрес и вызовет его.
  3. Как только URL-запрос будет обработан и завершен, он перейдет в метод requestFinished или в зависимости от того, что я выберу в качестве селектора.
  4. Модальное представление вернет responseString и продолжит работу по желанию.

Вот где я застрял. Я хотел бы каким-то образом передать responseString исходному вызывающему запросу сетевого URL-адреса.

Должен ли я использовать метод делегата? Если да, как я могу вызвать это из метода requestFinished? Я думал об этом, но меня немного смущает, как я получу вызов функции requestFinished для этого делегата. Мне может не хватать простого способа передать этот делегат как объект вместе с ASIHttpRequest.

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

Я ценю любую предоставленную помощь.


person Community    schedule 05.11.2009    source источник


Ответы (2)


Вы можете создать подкласс ASIHttpRequest и либо переопределить его - (void)requestFinished, что позволяет вам выполнять некоторую обработку в фоновом потоке (и по-прежнему вызывать [super requestFinished];), либо просто добавить переменную экземпляра id myDelegate; с помощью средства доступа, чтобы вы могли получить к ней доступ из своего -requestFinished

person Rog    schedule 05.11.2009
comment
Будет ли использование делегата лучшим способом решения этой проблемы? - person ; 06.11.2009
comment
Без прекрасного зрения, да, я так думаю. - person Rog; 08.11.2009

Это зависит от того, что вы хотите делать с ответом. Если вы просто хотите показать предупреждающее сообщение с ответом, вы можете сделать это прямо в методе задержки запроса. Другой способ - сохранить ваш ответ в классе с обменом данными и опубликовать уведомление, чтобы сообщить слушателю, что у него есть данные для обработки. Это не сложно) И третий вариант. Вы можете создать базовый класс для взаимодействия клиент-сервер со свойствами делегата и селектора. А затем просто вызовите [делегат performSelector: selector], если он вам нужен. Затем вы можете наследовать другие классы для входа в систему, проверки версий и т. Д.

person Morion    schedule 05.11.2009
comment
Не могли бы вы развить третий вариант? Я пытался это спланировать, но я не вижу этого так, как я думаю, что мне следовало бы быть. - person ; 06.11.2009