作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经在我的应用程序的下一版本中对数据库进行了更改。
在主视图 Controller 的 viewDidLoad 的末尾,我调用了一个方法来检查数据库是否是最新的。如果不是,则在修复数据库时显示 UIActivityIndicatorView(需要 5-10 秒)。
那部分是这样的:
[self.view addSubview: activityView];
//repair database
...
//done
[activityView removeFromSuperview];
我想要加载应用程序,显示 UIActivityIndicatorView,修复数据库,关闭 UIActivityIndicatorView。
问题是这一切都发生在加载屏幕 (default.png) 期间。
我添加了一些日志记录来查看何时调用 activityView,何时更新数据库等,并可以确认所有这些都在加载屏幕期间被记录。
我应该怎么做才能解决这个问题?
最佳答案
问题是您正试图在主线程上完成所有这些工作。直到控制权返回到运行循环,UI 才真正更新。相反,您需要显示事件指示器,然后安排您的数据库工作在后台线程上完成。确保在此期间禁用 UI 输入。工作完成后,您可以回调主线程,移除事件指示器,并启用 UI 交互。
请注意,如果您这样做,您需要确保您的数据库工作以一种在后台线程上安全发生的方式完成(例如,如果您使用的是 CoreData,您的后台线程需要它自己的上下文,等等。 )
另请注意,如果您决定不这样做,而只是使用 default.png 显示,如果完成这项工作的时间超过 5-10 秒,您的应用程序实际上将最终终止,用户将永远无法成功启动它。
关于ios - 工作时未显示 UIActivityIndicatorView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8320483/
我是一名优秀的程序员,十分优秀!