有很多更好的方法可以做到这一点。您尝试执行的操作的问题在于它是同步的,这意味着您的应用必须等待此操作完成,然后才能执行其他操作。NSURLConnection
我绝对会建议通过简单地使用andNSURLRequests
并为它们设置委托来将其变为异步调用。
它们的设置和管理相对简单,将使您的应用程序运行顺畅一百万倍。
稍后我回家后会发布一些示例代码来执行此操作。
更新
首先,调用这些连接的类需要成为接口文件中连接的委托,所以像这样。
视图控制器.h
@interface ViewController: UIViewController <NSURLConnectionDelegate, NSURLConnectionDataDelegate> {
NSMutableData *pageData;
NSURLConnection *pageConnection;
}
然后你需要在你的实现中创建/初始化必要的变量
视图控制器.m
-(void) viewDidLoad {
pageData = [[NSMutableData alloc] init];
NSURLRequest *pageRequest= [[NSURLRequest alloc] initWithURL:pageURL cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:4];
pageConnection = [[NSURLConnection alloc] initWithRequest:pageRequestdelegate:self];
}
然后,您还需要在检索数据时调用的委托函数。
-(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,但你可以根据需要添加任意数量的 URL。当然,您必须跟踪所有必要的NSURLConnections
信息,以便知道将收到的数据放在哪里,以及在发生故障或连接成功完成时要采取的措施,但这不是硬性扩展从我给的。
如果您发现任何明显的错误或某些东西不起作用,请告诉我。