我的viewDidAppear方法如下。 我的视图有一个动画指示器,它是动画和imageView。 在viewDidAppear中,我从我的服务器加载一个图像,该图像将用作上述imageView的图像。 我希望在我的图像完全加载之前,我的视图将显示动画指示器。 但我不能这样做。 在完全图像加载之前,我无法看到我的视图。 在图像加载过程中,我看到一个黑色视图
-(void)viewDidAppear
{
NSLog(@"view did appear");
[super viewDidAppear:animated];
NSData *data=[NSData dataWithContentsOfURL:[NSURL
URLWithString:@"http://riseuplabs.com/applications/christmaswallpaper/images/1.jpg"]];
}
有没有解决方案?
答案 0 :(得分:1)
您正在主线程上加载图像数据,因此您的线程将被阻塞,直到数据完全加载为止。您可以通过在后台线程上下载数据来解决此问题。
-(void)viewDidAppear {
// other code here
// execute method on a background thread
[self performSelectorInBackground:@selector(downloadData) withObject:nil];
}
- (void)downloadData {
// data is declared as an instance variable in the header
data = [NSData dataWithContentsOfURL:[NSURL
URLWithString:@"http://riseuplabs.com/applications/christmaswallpaper/images/1.jpg"]];
// All UI updates must be done on the main thread
[self performSelectorOnMainThread:@selector(updateUI)
withObject:nil waitUntilDone:NO];
}
- (void)updateUI {
// Hide the spinner and update the image view
}
答案 1 :(得分:1)
了解如何异步下载数据。请参阅here。
@ nduplessis的答案很好,而且更容易,尽管使用NSURLConnection asynch有好处。如果你赶时间并且不想实施新技术,那么他的答案就是要走的路。
请考虑选择所有回答问题的答案。它有助于在这里建立我们的社区。 p>