2012-01-30 94 views
1

我用下面的代码来执行一个HTTP请求:的Objective-C在等待异步HTTP请求来完成

NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:urlRequest delegate:self]; 

之后,我想用接收到的数据。我的问题是,我无法在connectionDidFinishLoading中做到这一点,但必须在我的代码中的另一个位置做到这一点。由于这是一个异步任务,我如何验证在任务完成之前我没有开始使用收到的数据?

由于提前,

编辑:我的主要问题是代表们,它使用接收到的数据的代码后调用。

+3

有没有原因'connectionDidFinishLoading:'不能只调用你的代码的相关部分? – Tommy 2012-01-30 15:43:43

回答

2

你只需要保持接收到的数据在伊娃的,只要你想使用它。如果你真的想可以肯定的,你也可以使用一个BOOL设置为YES在

- (void)connectionDidFinishLoading:(NSURLConnection *)connection 

不要忘了,因为iOS 5中,在NSURLConnectionDelegate(和DownloadDelegate)已经改变。

+0

我目前将收到的数据保存在ivar中。如果代表被调用,我也尝试使用标志(bool)来获取信息。在这里,我有问题,如果我用'while([NSURLClassXY boolvar]){} ...下面的代码检查bool,我最终会陷入无限循环......' – user1178380 2012-01-30 17:09:35

+1

这里是我用于单元测试的代码片段正在等待下载完成: 'NSRunLoop * theRL = [NSRunLoop currentRunLoop]; while(!self.downloadComplete && [theRL runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]);' 它有窍门。希望它能帮助你。 – teriiehina 2012-01-31 08:48:55