重构应用程序委托
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 (移除中间人)