Использование View View Controller с ASIHttpRequest и раскадровкой - PullRequest
0 голосов
/ 13 ноября 2011

ОК, я создаю приложение, которое будет использовать ASIHttpRequest в нескольких местах для получения данных JSON из веб-службы или для публикации в веб-службе.У меня это работает, но на самом деле не нравится, когда несколько экземпляров объекта запроса разбросаны по разным контроллерам представления (контроллеру входа в систему, контроллеру представления таблицы и контроллеру подробного представления. Я хотел бы переместить все мои методы ASIHttpRequest в одинкласс и просто вернуть словарь значений, которые были возвращены из веб-службы. Проблема с этим заключается в том, что методы делегата не возвращают то, что мне нужно было вернуть.

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

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

Спасибо!

1 Ответ

0 голосов
/ 13 ноября 2011

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

[(MyAppDelegateClass *)[UIApplication sharedApplication].delegate doLoginStuff:(NSDictionary *)params delegate:self];

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

Я не уверен, что вы имеете в виду, имея в виду, что экземпляры плавают повсюду. Если вы беспокоитесь о памяти, это не изменило бы повторное использование одного и того же объекта. ASI обычно использует запрос с автоматическим выпуском, так что это будет то же самое, что и создание его «консолидированным» методом. Если бы это был просто чистый код, я бы сделал один способ и, возможно, сделал бы быстрый вызов метода на основе c в некотором типе класса Utilities, который вы создаете и импортируете с помощью файла префикса. Но опять же, вам нужны методы обратного вызова в вашем контроллере представления, чтобы он не стал слишком чистым, чем он уже предназначен для работы. Я разделяю вашу боль, хотя.

Когда любой запрос возвращается, у меня почти всегда есть метод, который анализирует результаты. Обычно я работаю только с одним типом веб-службы, поэтому есть метод, который анализирует результаты и (также записывает его в NSLog для целей отладки) также возвращает мне NSDictionary или NSArray.

...