我正在尝试使用Objective C ++从C ++构造函数加载Nib。我已经搜索并找到了足够的示例来获取一些代码,但它不显示窗口。或任何窗口。
以下是构造函数的示例:
JokeSystem::JokeSystem() : fileSystem("/Library/Application Support/Jokes/")
{
try
{
randSystem = new RandSelect<std::string>
(fileSystem.getAllFileContents("%\n"));
}
catch (std::ifstream::failure)
{
NSWindowController * errorWindowControl = [[NSWindowController alloc]
initWithWindowNibName:@"ErrorWindow"];
[errorWindowControl showWindow: nil];
}
}
构造函数的目的是将目录的内容加载到字符串中。我尝试做的是在文件无法打开时显示错误窗口。
ErrorWindow.nib有一个单独的窗口,其中有一个OK按钮和一个NSTextView
的错误,我在笔尖中设置了NSWindowController
并将其连接到窗口。
我唯一的链接是大多数示例都显示此[errorWindowControl showWindow: self]
;
而不是showWindow: nil
,但因为这是一个C ++构造函数,我没有self
而this
不起作用。
如果重要,则从awakeFromNib
的主要MainMenu.nib
的{{1}}方法调用此构造函数。
由于
答案 0 :(得分:3)
接近Cocoa有点奇怪的方法。我鼓励您退后一步,学习Objective-C,然后在您拥有的任何后备存储或模型层的基础上,使用基于Objective-C的Cocoa UI层编写应用程序。
在任何情况下,该代码都没有特别的错误(除了奇怪的设计)。
要检查的第一件事是-initWithWindowNibName:的返回值。 errorWindowControl实际上是非零吗?如果它为零,则NIB无法加载。
你是如何编写Cocoa应用程序的?我希望使用Xcode的标准应用程序包?
此外,您不应该将路径硬编码到/ Library / Application Support /。实际上,您的应用程序不应该使用该目录作为唯一的存储位置;许多用户将无权访问该目录,并且无法在没有管理员访问权限的情况下安装您的应用程序。