重构应用程序委托

Posted

技术标签:

【中文标题】重构应用程序委托【英文标题】:Refactor the Application Delegate 【发布时间】:2011-08-26 16:21:12 【问题描述】:

我是 Obj-C 和 Xcode 4 的初学者,我目前正在查看 Mac Dev 网站上的 "Your First Mac Application"。我已经设法完成了主要部分,但我在“”部分中苦苦挣扎。

我创建了一个新类(用作控制器),为这个新类添加了一个对象集,将类连接到滑块、静音按钮和文本字段,并将新类对象连接到应用委托接口文件。

不幸的是,track 类的实例从未创建,因此程序无法运行,因为 awakeFromNib 函数从未被调用。我已经尝试将它放在应用委托文件和新的控制器类中。

我哪里错了???

【问题讨论】:

【参考方案1】:

您必须在 IB 中创建新类的实例,或者需要在 AppDelegate 对象中以编程方式创建它(通常在 init 或 awakeFromNib 中)。您需要在 AppDelegate 中有一个指向该对象的指针。如果在 IB 中创建新对象,则将其连接到 IB 中的 Track* 指针。如果您在代码中执行此操作,则类似于:

在 .h 文件中:

TrackClass *track;

在 .m 文件中:

track = [[Track alloc] init];

你做了什么?

【讨论】:

自从我的原始消息以来,我实际上已经设法通过放置在我的控制器类的 init 中使其工作,但是本教程建议我应该在应用程序委托中使用 awakeFromNib,这似乎并不被调用。【参考方案2】:

我在试用本教程时遇到了同样的问题,发现问题出在我的 awakeFromNib 实现上

错误代码:

- (void)awakeFromNib:(NSNotification *)aNotification

正确的代码

- (void)awakeFromNib

应该没有参数传递awakeFromNib的实现。

【讨论】:

以上是关于重构应用程序委托的主要内容,如果未能解决你的问题,请参考以下文章

重构改善既有代码设计--重构手法15:Remove Middle Man (移除中间人)

UITabBarController 委托方法永远不会被调用

学习重构-在对象之间搬移特性

核心数据重构

7大型重构

7大型重构