在可可中装入可可粒

Posted

技术标签:

【中文标题】在可可中装入可可粒【英文标题】:load nibs in cocoa 【发布时间】:2011-01-30 13:01:36 【问题描述】:

如何在另一个窗口中加载笔尖?

我尝试了 initWithWindowName,

if (mmController == NULL)
    mmController = [[mainMenu alloc] initWithWindowNibName:@"mainMenu"];
[mmController showWindow:self];

但它会打开一个新窗口。

我也试过 loadNibNamed

[NSBundle loadNibNamed:@"mainGame" owner:self];

它成功了,但是当我尝试使用相同的方法返回主菜单时,

[NSBundle loadNibNamed:@"mainMenu" owner:self];

它不起作用。它什么都不做... 有什么想法吗?

【问题讨论】:

【参考方案1】:

我尝试了 initWithWindowName,

您的意思是initWithWindow¹Nib²Name³:,它采用包含窗口 (1) 的笔尖 (2) 的名称 (3)。

if (mmController == NULL)

这应该是nil,而不是NULL,因为您正在比较一个Objective-C 对象指针。

    mmController = [[mainMenu alloc] initWithWindowNibName:@"mainMenu"];

这里的mainMenu 是什么?它必须是一个类,但它的子类是什么?

[mmController showWindow:self];

从这条消息和上一条消息来看,我猜mainMenu 是 NSWindowController 的子类。

不需要猜测。您应该明确地命名您的类,以便任何人都可以通过类名来判断该类是什么以及它的实例。

简洁是一种美德,但如果你需要做长,那就做长。我们拥有具有名称完成功能的现代工具。 Tab 键可以消除缩写名称的唯一优势。

但它会打开一个新窗口。

是的。您通过从 ni​​b 加载它创建了一个窗口,然后您告诉窗口控制器显示该窗口。显示一个新窗口是预期的结果。

我也试过 loadNibNamed

[NSBundle loadNibNamed:@"mainGame" owner:self];

它成功了,但是当我尝试使用相同的方法返回主菜单时,

没有“回头”。加载 nib 只是通过从存档中加载对象来创建对象。您可以多次加载同一个笔尖,加载一个笔尖不会以某种方式撤消加载前一个笔尖的结果。

您可能想阅读Resource Programming Guide,它涵盖了笔尖以及图像和声音文件,以及Bundle Programming Guide。

如果您想隐藏从 mainGame 笔尖加载的窗口,请执行此操作。 AppKit 中的术语是 “ordering out”(与“订购”相反,“ordering front” 和 “ordering back” 是特定的做法)。

[NSBundle loadNibNamed:@"mainMenu" owner:self];

它不起作用。它什么都不做......

您是否正在尝试加载项目附带的 MainMenu nib?如果是这样,请确保你的大小写正确——你不希望你的应用程序被从区分大小写的卷中运行的人破坏,也不希望它被使用默认不区分大小写的人破坏文件系统。

如果这不是您想要做的事情,那么不清楚您想要做什么。 MainMenu 通常是包含主菜单(菜单栏的内容)的 nib;将任何其他 nib 命名为“mainMenu”或类似的名称最多会引起混乱,最坏的情况是会引起问题。如果这应该是其他笔尖,你应该给它一个不同的名字。

无论如何,这不是您需要做的。如果要隐藏从mainGame 加载的窗口,则需要隐藏该窗口,而不是加载其他 nib。

此外,一旦窗口被加载,就不要再次加载它(除非你关闭并释放它)。加载后,您可以简单地重新订购它。很可能,您会想要make it key and order it front。

在 Mac 上,您一次不限于一个窗口;实际上,无论您做什么,您的应用程序都有多个窗口(至少三个)。这些 API 是围绕您显示多个窗口的能力而构建的。

请参阅Window Programming Guide 了解更多信息。

如何在另一个窗口中加载笔尖?

正如 Justin Meiners 已经告诉你的那样,你可能需要 NSViewController,尽管你可以不用直接使用 loadNibNamed: 加载包含视图的 nib。

请注意,NSViewController 不如 Cocoa Touch 的 UIViewController 强大/功能强大。

您需要阅读View Programming Guide 了解此内容。

【讨论】:

以上是关于在可可中装入可可粒的主要内容,如果未能解决你的问题,请参考以下文章

非洲可可油(Cocoa butter)你知道多少?

题解报告——聪聪与可可

NOI2005聪聪与可可

Cocoa Family——可可粉和可可脂

可可 ( COCOA)

荐岛|Cocoa Island 可可亚岛