2009-06-21 19 views
0

我正在嘗試從iPhone OS應用程序內的服務器上的.php文件中檢索數據。在一種方法中,我使用下面的代碼:對於-initWithContentsOfURL,應用程序等待:檢索Web數據嗎?

NSString *aString = [[NSString alloc] initWithContentsOfURL:aURL encoding:anEncoding error:nil]; 

//See what I got 
NSLog(aString); 

當我運行它好像應用的專用貫穿代碼如此之快,我懷疑,有足夠的時間進行數據請求有蒸騰。由此產生的字符串是完全空的,這進一步支持我的懷疑。這裏發生了什麼?該應用程序是否正在等待-initWithContentsOfURL從我的服務器上的.php文件中檢索數據?如果應用程序不等待這種方法,那麼是否還有另一種方法可以用來在轉移到下一個代碼之前以等待請求的方式執行數據請求?

(我也看到了一點點就NSURLConnection的 - 這是什麼,也許我應該尋找到替代-initWithContentsOfURL的)

+0

該方法調用在獲取數據之前應該等待,直到它跳轉到下一個語句。您是否嘗試從瀏覽器調用網址並查看您獲得的數據?您的回覆的標題信息中的內容類型是否正確?也許你應該嘗試在NSData中獲取它,並從NSData獲取字符串? – lostInTransit 2009-06-21 17:50:07

回答

3

NSURLConnection的是偉大的,從網上獲取文件......一點也沒有「T‘等待’本身,而是其委託回調:

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data 
- (void)connectionDidFinishLoading:(NSURLConnection *)connection 

...允許時,數據已經收到,當數據已完全下載您通知。通過這種方式,您可以在應用程序中顯示(如果您喜歡)UIProgressBar,然後在完全接收數據時處理該文件。

+4

這些方法只會在使用NSURLConnection的情況下調用,並且僅在進行異步調用時纔會調用。 initWithContentsOfURL:將進行同步調用 – lostInTransit 2009-06-21 17:49:33

相關問題