ViewDidAppear iOS 4.3 vs iOS 5,加载屏幕不会出现在4.3中

时间:2011-12-29 12:22:48

标签: objective-c ios uitableview

我有一个相当讨厌的问题。我有一个带有博客条目的表格视图(从RSS源收集)。加载视图时,我通过-addSubview:将加载屏幕应用于blogViews视图。在-viewDidAppear:中,我开始加载数据。这适用于iOS 5模拟器以及带有iOS 5.0.1的iPhone 4。

但是当我在4.3模拟器上执行此操作时,加载屏幕不会出现。屏幕被锁定在上一个屏幕(另一个tableView)上,直到加载完成。

问题是,当然,在视图出现之前不应该开始加载。举例说明:当我单击标签栏按钮打开博客时,加载开始(在-vievDidAppear:中),当加载完成时,屏幕出现 - 它应该是相反的方式!这很奇怪,为什么它会像4.3那样做而不是5?

我应该在第一个表中使用-viewWillUnload方法查看并应用加载屏幕吗?这意味着当我不需要加载屏幕时卸载它时,总会有一个加载屏幕(闪烁一秒)。

(通过加载屏幕,我的意思是用图像启动UIImageView,在顶部有一个activityIndi​​cator)

感谢您的任何意见!

1 个答案:

答案 0 :(得分:0)

Mark指出,你的问题与执行长操作时阻塞主线程有关,实际上应该在后台执行。 如果这样做,调用viewDidAppear:时无关紧要,因为在执行加载时你不会阻塞主线程。

您可以解决此问题,在后台执行加载操作,然后返回主线程以删除加载指示符。您可以使用GCD轻松完成:

- (void)viewDidAppear:(BOOL)animated 
{
    // ...
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,
                                            (unsigned long)NULL), ^(void) {
        // Perform your time consuming operation, eg. load your blog entry
        dispatch_async(dispatch_get_main_queue(), ^{
            // remove the loading screen and set your blog's data to UI components
        });
    });
}