2

我正在基于核心数据开发一个小型应用程序。在启动时,我需要启动一项维护任务——快速但重要——。要运行此任务,应用程序委托必须打开一个 UIManagedDocument,并对其执行各种检查。在检查完成之前,应用程序视图不得启动。因为打开 UIMD 是异步的,所以当第一个 UIview 尝试访问文档时,应用程序委托不会完成。然后应用程序由于竞争条件而崩溃,因为应用程序委托和视图试图同时打开文档,而文档状态尚未最终确定。

我正在使用情节提要,因此 segues 几乎可以控制操作系统...下次,我将手动完成所有操作..

你有什么建议?注意:1)我不能在应用程序时执行任务。进入后台状态,因为如果再次恢复,避免底层数据库和视图中显示的状态不一致会非常乏味。2)出于同样的原因,在正常执行期间执行维护任务并不容易。3) 所有视图都通过单例访问 UIMD,根据这里提出的代码

在 UIView 中设置互斥锁不是我的首选路线,因为屏幕保持黑色 - 没有数据 - 在显示选项卡栏时,直到它被应用程序委托释放。

有没有办法让应用程序委托在将控制权交给 UIViews 之前等待信号?在这种情况下,有什么陷阱吗?我怀疑这可能不是推荐的方法,如果代理等待维护任务完成的时间过长,iOS 可能会终止应用程序。在这种情况下,什么是“太长”?

4

1 回答 1

0

你可以用更优雅的方式来做。用户将看到的第一个视图必须是某种 SplashView - 只是带有进度指示器的图像。在您的任务进行时,它应该保持在最前面。如何显示此视图并不重要。您可以将其设置为故事板中的第一个,或者只是在applicationDidFinishLaunching消息中手动创建它。然后在您的任务即将完成时发送一个 NSNotification 并在您的 AppDelegate 中的观察者中隐藏您的 SplashView 并向您的第一个视图展示有价值的内容。您甚至可以为这些视图之间的过渡添加一些视觉效果,您的应用看起来会非常棒!:)

于 2013-01-03T16:26:17.550 回答