3

我有一个带有两个视图的 UITabBar 应用程序,它们在“viewWillAppear”方法中从 Web 加载大量数据。我想在检索此数据时显示进度条或活动指示器,以确保用户知道应用程序未冻结。

我知道以前有人问过这个问题。我只是需要澄清一下似乎是一个相当好的解决方案

我已经在示例中使用了代码。该问题的原始提问者后来通过将数据检索放入另一个“线程”来解决他们的问题。我理解线程的概念,但我不知道我会如何暗示这一点。

通过研究,我发现我需要将所有繁重的数据检索转移到后台线程中,因为所有 UI 更新都发生在主线程中。

如果有人愿意为我提供一个例子,我将非常感激。我可以根据需要提供部分现有代码。

4

1 回答 1

3

如果您使用 NSURLConnection 它会自动在另一个线程上运行。

在你的 viewDidLoad 中:

NSURLRequest *req = [NSURLRequest requestWithURL:theURL];
NSURLConnection *conn = [NSURLConnection connectionWithRequest:req delegate:self];

那么你需要一些自定义方法。如果您输入-connection并按 Esc,您将看到您可以使用的所有不同方法。你需要三个:

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
    // this is called when there is a response
        // if you're collecting data init your NSMutableData here
}

-(void) connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
    // each time the connection downloads a 
        // packet of data it gets send here
        // so you can do [myData appendData:data];
} 

- (void) connectionDidFinishLoading:(NSURLConnection *)connection {
        // the connection has finished so you can 
        // do what you want with the data here
}

这基本上就是它的全部内容。NSURLConnection 自己处理所有的多线程,你不必担心。现在您可以创建一个活动指示器并显示它,它会工作,因为主线程是空的。:)

于 2010-12-21T09:46:56.427 回答