gpt4 book ai didi

objective-c - AppDelegate 在启动时最后实例化

转载 作者:行者123 更新时间:2023-12-03 17:02:18 24 4
gpt4 key购买 nike

我对编写 iOS 应用程序非常满意,但 OS X 却出乎意料地显得有些陌生。

这是前面的问题(请继续阅读以了解上下文):

当我的应用程序使用应用程序目标的部署信息下的主界面字段中设置的 .xib 启动时,为什么 AppDelegate 在 ViewControllers 之后实例化?


上下文(无双关语):

我问这个问题的原因是因为我正在使用 Core Data(请不要对这个决定产生任何质疑),并且通常您会在 AppDelegate 中保留一个指向 MOC(托管对象上下文)的指针。我的一个 Controller 正在尝试获取此 MOC 实例变量,但 AppDelegate 实例尚未存在,因此我的应用程序在启动后不会显示数据。

AppDelegate 和两个 ViewController 位于 .xib 中。 VC 连接到分割 View 内的 View 。他们尝试使用 viewDidLoad 中的 MOC 来进行查询。他们像这样访问 AppDelegate:

let delegate = NSApplication.sharedApplication().delegate as AppDelegate
let moc = delegate.managedObjectContext

这会崩溃,因为 sharedApplication().delegate 属性返回 nil。

我尝试从applicationDidFinishLaunching中的.xib创建一个NSWindowController,并从主界面字段中删除.xib,但是applicationDidFinishLaunching根本没有被调用。

我已确保 IB 中从应用程序和文件所有者 (NSApplcation) 委托(delegate) IBOutlet 到 AppDelegate 的所有连接均已建立。




更新 - 2015 年 3 月 31 日

下面斯蒂芬·达林顿的回答为我/这个案例提供了一个很好的解决方案。据我了解,按照他建议的方式设置 MOC 实际上更好。

如果出现正确的答案,可以解释为什么 AppDelegate 在启动过程的稍后时间被实例化,我将把它标记为正确,而不是 Stephen 的。谢谢斯蒂芬!

最佳答案

“简单”的解决方案是让 managementObjectContext 创建一个 MOC(如果 MOC 不存在)(即,将其从属性更改为方法)。这样,无论哪个代码首先到达那里,堆栈都将可用。

(我将省去有关在应用程序委托(delegate)中创建核心数据堆栈以及像这样访问应用程序委托(delegate)的讲座!)

关于objective-c - AppDelegate 在启动时最后实例化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29185106/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com