我正在基于核心数据开发一个小型应用程序。在启动时,我需要启动一项维护任务——快速但重要——。要运行此任务,应用程序委托必须打开一个 UIManagedDocument,并对其执行各种检查。在检查完成之前,应用程序视图不得启动。因为打开 UIMD 是异步的,所以当第一个 UIview 尝试访问文档时,应用程序委托不会完成。然后应用程序由于竞争条件而崩溃,因为应用程序委托和视图试图同时打开文档,而文档状态尚未最终确定。
我正在使用情节提要,因此 segues 几乎可以控制操作系统...下次,我将手动完成所有操作..
你有什么建议?注意:1)我不能在应用程序时执行任务。进入后台状态,因为如果再次恢复,避免底层数据库和视图中显示的状态不一致会非常乏味。2)出于同样的原因,在正常执行期间执行维护任务并不容易。3) 所有视图都通过单例访问 UIMD,根据这里提出的代码
在 UIView 中设置互斥锁不是我的首选路线,因为屏幕保持黑色 - 没有数据 - 在显示选项卡栏时,直到它被应用程序委托释放。
有没有办法让应用程序委托在将控制权交给 UIViews 之前等待信号?在这种情况下,有什么陷阱吗?我怀疑这可能不是推荐的方法,如果代理等待维护任务完成的时间过长,iOS 可能会终止应用程序。在这种情况下,什么是“太长”?