2012-01-30 118 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