在可可中装入可可粒
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 键可以消除缩写名称的唯一优势。
但它会打开一个新窗口。
是的。您通过从 nib 加载它创建了一个窗口,然后您告诉窗口控制器显示该窗口。显示一个新窗口是预期的结果。
我也试过 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 了解此内容。
【讨论】:
以上是关于在可可中装入可可粒的主要内容,如果未能解决你的问题,请参考以下文章