2

我正在使用其 C++ 插件 API 在 Mac 上为 FileMaker Pro 11 Advanced 开发一个插件。我想NSWindow在屏幕上显示一个通过 XIB 文件加载的屏幕,但是如果在 XIB 文件中将窗口的“启动时可见”属性设置为“是”,我将无法显示该窗口。

我在尝试:

[window makeKeyAndOrderFront:NSApp];

问题是,这不会使窗口出现在屏幕上。我也试过:

[window makeKeyAndOrderFront:windowController];

和:

[window makeKeyAndOrderFront:window];

和:

[window makeKeyAndOrderFront:nil];

我对 Objective-C 和 Cocoa 非常陌生,所以我仍在学习有关在 Mac 上创建 GUI 的基本知识。但是,我不确定我的窗口控制器、我的窗口,甚至NSApp是“挂钩”FileMaker Pro;即我不知道我NSApp的是否和FileMaker 的一样NSApp。这是一个愚蠢的问题吗?

当“启动时可见”设置为“是”时,如何NSWindowController在屏幕上成功显示窗口​​?我不想继续使用该属性只是为了让我的窗口出现在屏幕上!

4

2 回答 2

0

您的示例中的“窗口”是什么?我希望该代码可以使用

[windowController.window makeKeyAndOrderFront: nil]

或者

[self.window makeKeyAndOrderFront: nil];

(或 NSApp 而不是 NIL 或其他任何东西,发送者在这里无关紧要,它被忽略了,只有接收者是相关的)。NSWindowController 延迟加载它的窗口,所以在调用 -window 之前不会加载 XIB。您不是直接访问实例变量 _window(或 self->_window),对吗?因为在您第一次调用 -window 之前,这将是 NIL。

此外,正如 Jan 已经提到的那样,FileMaker 非常非常古老,而且很可能还没有更新为使用 Cocoa 作为其用户界面。您可以混合使用 Carbon(可能仍然使用 FileMaker 编写)和 Cocoa,但有很多小问题和陷阱,所以我不推荐它,尤其是当您刚接触 Cocoa 时。你必须同时学习 Carbon 和 Cocoa 才能解决你正在做的很多事情。

顺便说一句——不要使用 NSApp。使用 [NSApplication sharedApplication],这将确保你得到一个 NSApplication 对象。如果你在任何人调用 [NSApplication sharedApplication] 之前调用它,NSApp 可能是 NIL。正如 Jan 提到的,对于 Carbon/Cocoa 集成,您可能必须调用函数 NSApplicationLoad() 以便 Carbon 知道您现在将在其中创建一些 Cocoa 窗口。但是,这仍然无法帮助您使用菜单栏,它仍然是 Carbon。

FileMaker SDK 是否提供用于创建窗口的规定?您可能不得不辞职以针对其 C++ SDK 编写代码。或者,创建一个独立的 Cocoa 应用程序来创建您的窗口并完成工作,并创建一个小型 C++ 插件来简单地启动该应用程序,将数据交给它(例如,通过将其写入文件或发送 AppleEvent 到您的应用程序,或使用分布式对象发送信息),然后在某个时候知道如何从应用程序中检索数据并将其返回给 FileMaker。

于 2012-10-17T17:03:52.637 回答
0

因此,您正试图从 Carbon 应用程序显示 Cocoa 窗口。你NSApplicationLoad先打电话了吗?有关详细信息,请参阅Apple 网站上的CarbonCocoaIntegration.pdf

于 2011-01-30T16:42:18.883 回答