2010-08-23 46 views
0

我想要顯示從web服務加載的數據,但webservice需要很長時間並且「數據」在加載之前顯示。我該如何強迫它等待?讓程序等待,直到代碼的其餘部分完成加載

謝謝。

連接到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]; 

if(conn) 
{ 

} 
+0

iPhone或OS X?你如何發送請求? – 2010-08-23 09:45:53

+0

iPhone - 使用SOAP - 抱歉沒有包含問題 – Lilz 2010-08-23 09:47:17

+0

我的意思是你如何以編程方式發送請求? 'NSURLRequest',...?簡短的示例代碼不會傷害。 – 2010-08-23 09:48:26

回答

2

默認情況下,NSURLConnection類是異步的,沒有什麼特別的,你不得不這樣做。我可以從上面發佈的代碼中看到,您正在設置NSURLConnection的代理,您只需實現委託所需的方法即可。

看看NSURLConnection類引用,特別是「概述」部分,其中介紹了委託方法。

在你的代碼片段中,在你開始連接之後,你可以顯示一個帶有微調器的UIAlertView,然後在你的數據到達時在委託方法中關閉它。

1

有兩種方法可以做到這一點,Web服務SOAP調用可以異步和同步調用,但我只建議使用異步方法,您現在正在使用,因爲它是更快,你將不必要地阻止iPhone UI線程,你可能會阻止用戶界面,所以用戶會認爲你的程序崩潰了。

最好的辦法是在桌面上顯示一些UI動畫和一些MODAL窗口,以防止用戶輸入任何輸入。

相關問題