Objective-C & ASIHTTPRequest возвращаемые значения - PullRequest
1 голос
/ 19 апреля 2011

Я использую ASIHTTPRequest в приложении Objective-C Mac.Я создаю класс, который обращается к общедоступному API веб-службы (через ASIHTTPRequest), назовем его PublicAPI.Я хочу написать методы, которые напрямую возвращают данные из веб-службы, что-то вроде этого ...

publicAPI = [[PublicAPI alloc] initWithAccountInfo:email:[self email] password:[self password]];
NSArray *theData = [publicAPI getData];

Итак, getData необходимо инициировать запрос ASIHTTPRequest AND вернуть ответ с сервера.Проблема в том, что я хочу сделать вызовы ASIHTTPRequest с опцией ASIHTTPRequest startAsynchronous, которая делегирует ответ сервера методу requestFinished.

Как можно использовать результат requestFinished в качестве возвращаемого значения метода getData?

Спасибо за ваш совет!

Ответы [ 2 ]

0 голосов
/ 06 августа 2011

Сделай свой [publicAPI getData] на самом деле быть подклассом ASIHTTPRequest. Он получит обратные вызовы делегата ASI (успех, сбой) и обработает (JSON, XML, CoreData и т. Д.) Ваши входящие данные.

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

Если вы создаете подкласс для каждого из вызовов API вашего бэкэнда, с общей системой обработки каждого для вашего API, вы можете сделать общение с вашим бэкэндом приятным и легким.

0 голосов
/ 19 апреля 2011

Ваш подход потребует, чтобы getData дождался ответа, прежде чем вернуться, что сделало бы соединение синхронным.Это на самом деле не имеет смысла.

Шаблон делегата, который уже реализован ASIHTTPRequest (и NSURLConnection в этом отношении), является лучшим подходом здесь.

Если вам просто нужно установить синхронное соединениедля тестирования NSURLConnection имеет метод класса для этого:

+ (NSData *)sendSynchronousRequest:(NSURLRequest *)request returningResponse:(NSURLResponse **)response error:(NSError **)error
...