【发布时间】:2018-04-16 18:29:20
【问题描述】:
在 Cocoa 中,Storyboard 的第一个视图控制器将在调用 AppDelegate 的 applicationDidFinishLaunching 之前调用 viewDidLoad(在第一个视图控制器上)。
由于我在applicationDidFinishLaunching 中获取了我的NSManagedObjectContext,因此我需要等待applicationDidFinishLaunching 才能加载我的数据。
换句话说,在viewDidLoad,我还没有我的NSManagedObjectContext。
我现在在做什么:
我在viewDidLoad 中添加了一个applicationDidFinishLaunching 观察者,并在触发时加载数据。
所以(按顺序):
1. ViewController 正在添加一个applicationDidFinishLaunching 观察者。
2. AppDelegates 运行其applicationDidFinishLaunching 并触发观察者。
3. 我可以从我的 ViewController 加载数据。
我意识到我正在中继 viewDidLoad,以便在applicationDidFinishLaunching 之前被调用。如果更改顺序,观察者将添加到applicationDidFinishLaunching 之后,并且不会加载数据。
让我的“CoreDataManager”直接在其init 中从 AppDelegate 获取NSManagedObjectContext 会“更安全”吗?
【问题讨论】:
-
这里真正的问题是,为什么
viewDidLoad在applicationDidFinishLaunching之前被调用?这不正常。一些奇怪的事情正在发生,Core Data 只是症状,而不是原因。 -
@TomHarrington 恐怕是在可可的土地上:stackoverflow.com/questions/36681587/…
-
抱歉,我在考虑 iOS。没关系。
-
@TomHarrington 你说得对。这真的很违反直觉,在 Apple 的示例中,它们指示
NSManagedObjectContext指针在applicationDidFinishLaunching中向右传递。