等待代码完成执行

时间:2010-09-01 07:40:04

标签: objective-c

我想知道等待代码在目标c项目中完成执行的最简单方法,因为我正在调用Web服务并检索结果,而是在web服务完成调用和填充之前检索结果。

有什么建议吗?

这是我的网络服务代码:

    NSMutableURLRequest *theRequest=[NSMutableURLRequest requestWithURL:tmpURl];

[theRequest addValue:@"text/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"];

[theRequest addValue:@"http://tempuri.org/GetCategory" forHTTPHeaderField:@"SOAPAction"];

NSString *msgLength=[NSString stringWithFormat:@"%i",[soapMessage length]];

[theRequest addValue:msgLength forHTTPHeaderField:@"Content-Length"];

[theRequest setHTTPMethod:@"POST"];

[theRequest setHTTPBody:[soapMessage dataUsingEncoding:NSUTF8StringEncoding]];

NSURLConnection *conn=[[NSURLConnection alloc] initWithRequest:theRequest delegate:self];

以及我用来从其他类调用此方法的代码:

images = [ws callWebService:api :data];

        images = [ws returnArray];

现在的问题是,第二行是在第一行完成之前执行的

2 个答案:

答案 0 :(得分:20)

您可以轻松完成以下操作,

-(void)aFunc {

Do Asynchronous A job...

while (A is not finished) {
// If A job is finished, a flag should be set. and the flag can be a exit condition of this while loop

// This executes another run loop.
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];

}

Do things using the A's result.

}

答案 1 :(得分:4)

你可以使用许多Cocoa design patterns中的一个(代表,通知等)。

例如,您将触发该方法并等待您收到回复。

看起来您正在使用异步请求,在这种情况下,您需要等到其中一个委托方法收到通知请求已完成(错误或成功)。

顺便说一句,您的请求是什么样的?您能否分享一些代码来解释您如何处理请求以及何时以及您想要做什么?

插入代码后编辑:

您将self设置为请求的委托,因此您应该能够处理响应。

查看NSURLConnection Class Reference。当请求在这些方法上完成时,您将需要触发解析器,例如:

– connection:didReceiveResponse:
– connection:didReceiveData:
– connection:didFailWithError:

干杯,

VFN