Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否建议使用默认的Xcode 4.6.3新项目和Cocoa应用程序模板结构?_Xcode_Cocoa - Fatal编程技术网

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

是否建议使用默认的Xcode 4.6.3新项目和Cocoa应用程序模板结构?,xcode,cocoa,Xcode,Cocoa,我使用的是Xcode 4.6.3,我使用“Cocoa应用程序”模板创建了一个新项目。默认结构对我来说似乎有点可笑,我想知道它是否是推荐的结构 具体而言,模板创建的三个文件是: main菜单.xib AppDelegate.h AppDelegate.m MainMenu.xib文件包含主菜单定义和主窗口的定义。对于我来说,在名为MainMenu.xib的文件中定义主窗口似乎很奇怪这是定义主窗口的推荐位置吗? 我希望看到像MainWindow.h和MainWindow.m这样的文件,这些文件都

我使用的是Xcode 4.6.3,我使用“Cocoa应用程序”模板创建了一个新项目。默认结构对我来说似乎有点可笑,我想知道它是否是推荐的结构

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

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


我希望看到像
MainWindow.h
MainWindow.m
这样的文件,这些文件都是从
NSViewController
子类化的。从模板创建的当前结构将引导我为应用程序委托中的主窗口事件创建处理程序。这对我来说也很奇怪是否建议将主窗口出口和处理程序放在应用程序代理中?

我要做的第一件事就是将该窗口撕下

我希望看到像MainWindow.h和MainWindow.m这样的文件是从NSViewController子类化的

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

我所做的(从主菜单nib中删除窗口后)是使用Objective-C类文件模板创建窗口控制器子类,并启用“和nib,也请”选项(当超类为NSViewController或NSWindowController时出现)

(不要忘了选择nib,然后单击文件检查器中的按钮使其可本地化,因为Xcode默认情况下由于某些原因不会这样做。)

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

@implementation MyWindowController

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

//and all my app-specific stuff

@end
在app delegate中,我删除了曾经引用主菜单born窗口的插座,然后创建了窗口控制器:

@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
消息。)

是否建议在应用程序代理中放置主窗口出口和处理程序

否。这超出了应用程序的委托应该执行的操作范围

对于一个非常简单的单窗口应用程序,您可能希望使窗口控制器成为应用程序的委托。但即使这样,也不同于让不是窗口控制器的应用程序代理处理动作、成为数据源等。这是给窗口控制器增加一点责任和给应用程序代理增加一大堆责任之间的区别

我总是把它们分开。在简单的情况下,这是一点额外的工作,但我的项目更干净,这让我更快乐,而且我通常迟早都需要做这件事。

你真是太棒了……:)如果你能帮助我,我将不胜感激。