我已在我的应用的下一个版本中对数据库进行了更改。
从主视图控制器的viewDidLoad的末尾,我调用一个方法来检查数据库是否是最新的。如果不是UIActivityIndicatorView在修复数据库时显示(需要5-10秒)。
那部分是这样的:
[self.view addSubview: activityView];
//repair database
...
//done
[activityView removeFromSuperview];
我希望加载应用程序,显示UIActivityIndicatorView,修复数据库,关闭UIActivityIndicatorView。
问题是这一切都发生在加载屏幕(default.png)中。
我添加了一些日志记录,以查看调用activityView的时间,更新数据库的时间等,并且可以确认在加载屏幕期间记录了所有这些。
我该怎么做才能解决这个问题?
答案 0 :(得分:2)
问题是你是否正在尝试在主线程上完成所有这些工作。在控制权返回到runloop之前,UI实际上并未实际更新。相反,您需要显示活动指示器,然后安排您的数据库工作在后台线程上完成。确保在此期间禁用UI输入。工作完成后,您可以回调主线程,删除活动指示器,并启用UI交互。
请注意,如果执行此操作,则需要确保数据库工作以在后台线程上安全发生的方式完成(例如,如果您使用CoreData,则需要后台线程它自己的背景等。)
另请注意,如果您决定不这样做,而只是使用default.png显示,那么如果执行此工作需要超过5-10秒,您的应用实际上将最终被终止,并且用户将永远无法成功启动它。