将ASIHTTPRequest“requestFinished”的结果传递回原始方法

时间:2010-05-20 23:37:31

标签: iphone objective-c delegates callback asihttprequest

我有一个方法(getAllTeams :),它使用ASIHTTPRequest库启动HTTP请求。

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不返回任何内容,因为在requestFinished:方法中评估了HTTP响应。

理想情况下,我希望能够调用[WebService getAllTeams],等待响应,然后将其转储到NSArray中。我不想创建属性,因为这是一次性类(意味着它不存储任何值,只检索值),并且多个方法将使用相同的requestFinished(所有这些都返回一个数组)。

我已经阅读过一些关于代表和NSNotifications的内容,但我不确定它们中的任何一个是否是最好的方法。我发现this snippet关于通过将选择器作为参数传递来实现回调,但它没有成功(因为requestFinished独立触发)。

有什么建议吗?我甚至只是指出正确的方向,我感激不尽。

NSArray *teams = [[WebService alloc] getAllTeams];(目前无效,因为getAllTeams不会返回任何内容,但是requestFinished会返回。我想获取requestFinished的结果并将其传递回getAllTeams:)

1 个答案:

答案 0 :(得分:0)

发送对原始类实例的引用以及调用:

[WebService getAllTeams:self];

然后修改-getAllTeams以接受对原始实例的引用:

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

您的原始实例将负责处理响应和清理内存。