0

我正在尝试使用 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用于错误的窗口,我在 nib 中设置了一个NSWindowController并将其连接到窗口。

我唯一的链接是大多数示例都显示了这一点[errorWindowControl showWindow: self];而不是showWindow: nil因为这是一个 C++ 构造函数,所以我没有它也self不起作用this

如果重要的话,这个构造函数是从 的主要awakeFromNib方法中调用的。MainMenu.nibNSObject

谢谢

4

1 回答 1

3

接近可可的方式有点奇怪。我鼓励您退后一步,学习 Objective-C,然后在您拥有的任何支持存储或模型层之上使用基于 Objective-C 的 Cocoa UI 层编写您的应用程序。

无论如何,该代码并没有什么特别的错误(除了奇怪的设计)。

首先要检查的是 -initWithWindowNibName: 的返回值。errorWindowControl 实际上是非零的吗?如果为 nil,则 NIB 加载失败。

您如何编写 Cocoa 应用程序本身?我希望使用 Xcode 的标准应用程序包?

此外,您不应该对 /Library/Application Support/ 的路径进行硬编码。实际上,您的应用程序不应该将该目录用作唯一的存储位置;许多用户将没有对该目录的写入权限,并且在没有管理员权限的情况下将无法安装您的应用程序。

于 2009-08-30T19:07:41.670 回答