我正在使用Core Data创建一个相当复杂的iPhone应用程序。到目前为止,事情一直很好。然而,随着应用程序变得越来越复杂,出现了一个新问题:第一个视图控制器正在完成其viewDidLoad方法,然后AppDelegate甚至在其applicationDidFinishLaunching方法的中途。
视图控制器不是根,它是标签栏控制器。有问题的VC是标签栏上默认选定选项卡的VC。它正在被IB实例化。
根据我的经验,之前没有发生这样的事情,它正在抛弃我在AppDelegate中进行的重要初始化(从Core Data获取对象并准备使用它们)。此外,它是间歇性的 - 有时代理 首先完成。
有没有人注意到这样的困难?任何处理此类问题的示例代码?
我想答案是,只有当AppDelegate发送消息准备就绪时,VC才会加载AppDelegate准备好的数据。我有点担心这会增加一些东西,这些东西最终会在我的屁股上咬我。
答案 0 :(得分:1)
我用来避免这种竞争条件的解决方案是完全放弃引用应用程序的任何功能UI,直到数据加载和验证为止。在我的-applicationDidFinishLaunching:方法的顶部,我执行以下操作:
如何实施第4步(子程序调用,异步通知,键值观察等)完全取决于您。重要的是根据加载任何所需数据组件来加载任何UI组件的想法。
这使您可以编写所有UI代码而无需担心数据,这也是您希望在MVC应用程序中执行的操作。
答案 1 :(得分:0)
一旦app委托初始化完成,就触发NSNotification
- 这可能是applicationDidFinishLaunching
方法最后做的事情。
让同一个app delegate侦听该通知并触发一个选择器,比如loadViewController
,然后加载视图控制器。