是否默认Xcode 4.6.3推荐使用Cocoa应用程序模板结构的新项目?

时间:2013-06-22 17:37:18

标签: xcode cocoa

我正在使用Xcode 4.6.3,并且我使用“Cocoa Application”模板创建了一个新项目。默认结构对我来说似乎有点滑稽,我想知道它是否是推荐的结构。

具体而言,模板创建的三个文件是:

  • MainMenu.xib
  • AppDelegate.h
  • AppDelegate.m

MainMenu.xib文件包含主菜单定义和主窗口的定义。在名为MainMenu.xib的文件中定义主窗口对我来说似乎很奇怪。 这是定义主窗口的推荐位置吗?

我希望看到来自MainWindow.h的{​​{1}}和MainWindow.m子文件。从模板创建的当前结构将引导我为app委托中的主窗口事件创建处理程序。这对我来说也很奇怪。 是否建议将主窗口和处理程序放在应用代理中?

1 个答案:

答案 0 :(得分:2)

我做的第一件事就是撕掉那扇窗户。

  

我希望看到像MainWindow.h这样的文件,以及从NSViewController中继承的MainWindow.m文件。

视图控制器不是窗口,窗口不是视图控制器。

我所做的(在从MainMenu笔尖删除窗口之后)创建一个窗口控制器子类,使用Objective-C类文件模板并启用“和一个笔尖,请”选项(当超类是NSViewController或NSWindowController时出现)。

(不要忘记之后选择笔尖并单击文件检查器中的按钮以使其可本地化,因为Xcode由于某种原因默认不这样做。)

在子类的实现中,我有以下内容:

@implementation MyWindowController

- (instancetype) init {
    return [self initWithWindowNibName:NSStringFromClass([self class])];
}

//and all my app-specific stuff

@end

在app delegate中,我删除曾经引用MainMenu生成窗口的插座,然后创建窗口控制器:

@implementation MyAppDelegate
{
    MyWindowController *_wc;
}

- (void) applicationWillFinishLaunching:(NSNotification *)notification {
    _wc = [MyWindowController new];
    [_wc showWindow:nil];
}

- (void) applicationWillTerminate:(NSNotification *)notification {
    [_wc close];
    _wc = nil;
}

@end

(我使用ARC;如果不这样做,则需要在其中添加release消息。)

  

是否建议将主窗口和处理程序放在app delegate中?

没有。这超出了应用程序代表应该做的范围。

对于极其简单的单窗口应用程序,您可能希望将窗口控制器设置为应用程序的委托。但即使这与制作不是窗口控制器的应用程序委托处理动作,数据源等不同。这是在向窗口控制器添加一点责任并添加大量责任之间的区别。应用代表。

我始终将它们分开。在简单的情况下,这是一项额外的工作,但我的项目更清洁,这让我更快乐,我通常需要迟早这样做。