在工作时未显示UIActivityIndi​​catorView

时间:2011-11-30 02:38:07

标签: ios ios5 uiactivityindicatorview viewdidload

我已在我的应用的下一个版本中对数据库进行了更改。

从主视图控制器的viewDidLoad的末尾,我调用一个方法来检查数据库是否是最新的。如果不是UIActivityIndi​​catorView在修复数据库时显示(需要5-10秒)。

那部分是这样的:

[self.view addSubview: activityView];

//repair database
...
//done

[activityView removeFromSuperview];

我希望加载应用程序,显示UIActivityIndi​​catorView,修复数据库,关闭UIActivityIndi​​catorView。

问题是这一切都发生在加载屏幕(default.png)中。

我添加了一些日志记录,以查看调用activityView的时间,更新数据库的时间等,并且可以确认在加载屏幕期间记录了所有这些。

我该怎么做才能解决这个问题?

1 个答案:

答案 0 :(得分:2)

问题是你是否正在尝试在主线程上完成所有这些工作。在控制权返回到runloop之前,UI实际上并未实际更新。相反,您需要显示活动指示器,然后安排您的数据库工作在后台线程上完成。确保在此期间禁用UI输入。工作完成后,您可以回调主线程,删除活动指示器,并启用UI交互。

请注意,如果执行此操作,则需要确保数据库工作以在后台线程上安全发生的方式完成(例如,如果您使用CoreData,则需要后台线程它自己的背景等。)

另请注意,如果您决定不这样做,而只是使用default.png显示,那么如果执行此工作需要超过5-10秒,您的应用实际上将最终被终止,并且用户将永远无法成功启动它。

相关问题