有很多更好的方法來做到這一點。你試圖做什麼的問題是它是同步的,這意味着你的應用程序必須等待這個動作完成才能做其他事情。我絕對會建議通過簡單地使用NSURLConnection
和NSURLRequests
,併爲它們設置代表來進行調查。
它們的設置和管理相對簡單,並且會使您的應用運行一百萬次更順暢。
我會發布一些示例代碼,稍後再做一次,一旦我回家。
UPDATE
首先,你的類正在調用這些連接將需要在接口文件的連接的委託,所以這樣的事情。
ViewController.h
@interface ViewController: UIViewController <NSURLConnectionDelegate, NSURLConnectionDataDelegate> {
NSMutableData *pageData;
NSURLConnection *pageConnection;
}
然後你需要在你創建/初始化必需的變量執行
ViewController.m
-(void) viewDidLoad {
pageData = [[NSMutableData alloc] init];
NSURLRequest *pageRequest= [[NSURLRequest alloc] initWithURL:pageURL cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:4];
pageConnection = [[NSURLConnection alloc] initWithRequest:pageRequestdelegate:self];
}
那麼你還需要在數據被ret時將被調用的委託函數rieved。
-(void) connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
if (connection == pageConnection) {
[pageData appendData:data];
}
}
-(void) connectionDidFinishLoading:(NSURLConnection *)connection {
if (connection == pageConnection) {
// Do whatever you need to do with the data
}
}
-(void) connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
if (connection == pageConnection) {
// Do something since the connection failed
}
}
當然這個例子只包括一個URL被加載,但你可以使它多達你想要的。您當然必須跟蹤所有必要的NSURLConnections
,以便您知道將接收到的數據放在哪裏,以及在發生故障或成功完成連接時應採取的措施,但這並不困難從我所給的擴展。
如果您看到任何明顯的錯誤或某些不起作用,請讓我知道。
謝謝,這對我有用! – mvb