2010-05-20 26 views
0

我有一个方法(getAllTeams :)使用ASIHTTPRequest库发起HTTP请求。ASIHTTPRequest通过结果“requestFinished”返回原始方法

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 :)

回答

0

发送参考始发连同所述呼叫类的实例:

[WebService getAllTeams:self]; 

然后修改-getAllTeams接受的始发实例的引用:

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

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

+0

我是否可以使用此方法访问responseString/responseData,还是我需要处理自己的东西? – Intelekshual 2010-05-21 13:49:32

+0

您的代理方法(位于您的原始类实例中)可以访问'responseString'和'responseData',因为这些方法被传递给'request'的引用。 – 2010-05-21 17:13:30

+0

您可以使用此方法使用异步调用吗?我一直在搞乱它,并没有能够得到它的工作。试图弄清楚发生了什么。感谢您的帮助。 – Intelekshual 2010-05-21 22:30:12