Передача результата запроса ASIHTTPRequest "requestFinished" обратно в исходный метод - PullRequest
0 голосов
/ 21 мая 2010

У меня есть метод (getAllTeams :), который инициирует HTTP-запрос с использованием библиотеки ASIHTTPRequest.

NSURL *httpURL = [[[NSURL alloc] initWithString:@"/api/teams" relativeToURL:webServiceURL] autorelease];

ASIHTTPRequest *request = [[[ASIHTTPRequest alloc] initWithURL:httpURL] autorelease];
[request setDelegate:self];
[request startAsynchronous];

То, что я хотел бы сделать, это позвонить по номеру [WebService getAllTeams] и вернуть его в NSArray. На данный момент getAllTeams ничего не возвращает, потому что HTTP-ответ оценивается в методе requestFinished :.

В идеале я бы хотел иметь возможность вызвать [WebService getAllTeams], дождаться ответа и выгрузить его в NSArray. Я не хочу создавать свойства, потому что это одноразовый класс (то есть он не хранит никаких значений, он просто извлекает значения), и несколько методов будут использовать один и тот же requestFinished (все они возвращают массив).

Я немного прочитал о делегатах и ​​NSNotifications, но я не уверен, является ли один из них лучшим подходом. Я нашел этот фрагмент о реализации обратных вызовов путем передачи селектора в качестве параметра, но он не выпал (так как requestFinished запускается независимо).

Есть предложения? Я был бы признателен, даже если бы меня указали в правильном направлении.

NSArray *teams = [[WebService alloc] getAllTeams]; (в настоящее время не работает, потому что getAllTeams ничего не возвращает, но requestFinished делает. Я хочу получить результат requestFinished и передать его обратно getAllTeams:)

1 Ответ

0 голосов
/ 21 мая 2010

Отправить ссылку на исходный экземпляр класса вместе с вызовом:

[WebService getAllTeams:self];

Затем измените -getAllTeams, чтобы принять ссылку на исходный экземпляр:

- (void) getAllTeams:(id)sender {
    // ...
    [request setDelegate:sender];
    // ...
}

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

...