OSX 上 AppDelegate 类的更改

Posted

技术标签:

【中文标题】OSX 上 AppDelegate 类的更改【英文标题】:Change of AppDelegate class on OSX 【发布时间】:2014-11-16 15:10:24 【问题描述】:

我在 OSX 上有一个可可项目。为此,我不得不更改 Appdelegate 的类。 我分两步完成:首先我实现了新的 appdelegate 类(我还没有实现NSApplicationDelegate 协议)并检查它是否工作和编译。在新类中,我已经实现了applicationDidFinishLaunching 方法。一切都还好!

之后我更改了协议实现。我从旧的 Appdelegate 中删除了 prorocol,并将其插入到新的 Appdelegate 中。即使在这一步之后,一切似乎都很好!该应用程序按应有的方式编译和工作。但由于我有点怀疑,我在新旧类中插入了日志语句。

插入后,我必须看到,应用程序仍然使用旧的 appdelegate! 显然,还有一些东西,旧的 appdelegate 的名字仍然为人所知!但那在哪里?还是我必须做其他事情才能达到我的目标?有谁知道我必须做什么?

【问题讨论】:

【参考方案1】:

有两件事必须发生:1) 必须实例化新类的实例。 2) 该实例需要分配给应用程序对象的delegate 属性(NSApplication 的实例或子类)。

在典型的 Mac 应用程序中,这两件事都在 MainMenu NIB 中完成。该NIB 包含相应类的冻干实例。如果您要从头开始构建 NIB,您需要将“对象”(蓝色立方体)从对象库拖到 NIB 文档中。默认情况下,这将代表NSObject 的一个实例。然后,您将选择它并调出身份检查器,您将在其中将其类更改为新的应用程序委托类。由于您不是从头开始构建 NIB,因此 NIB 中已经有一个对象。您可以选择它并更改其类别。

另一个步骤,将其分配给应用程序对象的delegate 属性,是通过将NIB 中应用程序对象的占位符的delegate 出口连接到对象来完成的。同样,由于您不是从头开始构建 NIB,因此已经完成了。

因此,总而言之,您只需在 MainMenu NIB 中更改应用委托对象的类。


更新:这是您必须更改的屏幕截图:

【讨论】:

你的回答提醒了我,我忘了提,我还在 IB 中重命名了“对象”。缺少的是分配委托属性...不幸的是,新类中没有委托属性。那我该怎么办? 抱歉,刚刚看到,文件的所有者有一个委托属性(一个插座)分配给新对象顺便说一句,文件的所有者是 NSApplication 重命名对象与更改其类不同。 嗯,明白了!通过重构类更改了名称。尽管如此,它没有要连接的委托属性。 你的类不需要委托属性。 delegate 属性属于 File's OwnerNSApplication 实例,您可能不会更改它。你需要做两件事。首先突出显示 File's Owner 多维数据集,然后在 Connections Inspector 中从 delegate 出口拖动到代表新类的多维数据集。调整新类的 .h 文件以表明它实现了 NSApplicationDelegate 协议,然后实现该协议。

以上是关于OSX 上 AppDelegate 类的更改的主要内容,如果未能解决你的问题,请参考以下文章

AppDelegate (OSX) 中主 NSWindow 的引用出口

无法通过 UINavigationcontroller.viewControllers 更改类的属性

如何在 OSX 应用程序中将 CoreData 管理与 AppDelegate 分离

“无法识别的选择器”-将 AppDelegate 的 NSManagedObjectContext 导入其他类 (OSX) 时出错

在另一个类的 App Delegate 调用方法中

iOS 以编程方式更改 AppDelegate 中的视图