gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 16:37:12 25 4
gpt4 key购买 nike

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

具体来说,模板创建的三个文件是:

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

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

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

最佳答案

我做的第一件事就是把 window 撕掉。

I was expecting to see a files like MainWindow.h, and MainWindow.m subclassed from NSViewController.

View Controller 不是窗口,窗口也不是 View Controller 。

我所做的(从 MainMenu Nib 中删除窗口后)是创建一个窗口 Controller 子类,使用 Objective-C 类文件模板并启用“还有一个 Nib ”选项(当父类(super class)是 NSViewController 或 NSWindowController 时出现)。

(不要忘记随后选择 Nib ,然后单击文件检查器中的按钮以使其可本地化,因为 Xcode 由于某种原因默认情况下不会执行此操作。)

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

@implementation MyWindowController

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

//and all my app-specific stuff

@end

在应用程序委托(delegate)中,我删除了曾经引用 MainMenu 生成窗口的 socket ,然后创建窗口 Controller :

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

Is it recommend to put the main window outlets and handlers in the app delegate?

没有。这超出了应用程序委托(delegate)应该执行的操作范围。

对于极其简单的单窗口应用程序,您可能希望将窗口 Controller 设置为应用程序的委托(delegate)。但即便如此,这也与使不是窗口 Controller 的应用程序委托(delegate)处理操作、成为数据源等不同。这是向窗口 Controller 添加一点责任与向窗口 Controller 添加大量责任之间的区别。应用程序委托(delegate)。

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

关于xcode - 是否推荐使用具有 Cocoa 应用程序模板结构的默认 Xcode 4.6.3 新项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17253494/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com