查看显示延迟

时间:2009-11-09 07:49:29

标签: iphone

我的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"]];
}

有没有解决方案?

2 个答案:

答案 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有好处。如果你赶时间并且不想实施新技术,那么他的答案就是要走的路。

请考虑选择所有回答问题的答案。它有助于在这里建立我们的社区。