使用 Apple OS X Cocoa 框架,我如何发布 床单 (滑下模式对话框)在另一个进程的窗口上?

编辑: 澄清一点:

我的应用程序是一个 Finder 扩展,用于进行 Subversion 版本控制(http://scplugin.tigris.org/)。我的应用程序的一部分是一个插件(Finder 的上下文菜单项);然而,我的应用程序的大部分位于单独的守护进程中。出于多种原因,我们选择将几乎所有代码放入守护进程中;该插件仅定义菜单本身,并将 Apple-Events 传递给守护进程。

有时,守护进程需要提示用户提供更多信息。它可以为此在屏幕上弹出一个窗口,但这是破坏性的(随机定位),在我看来,这里的工作流程是合法模式的,例如“选择一个文件,从菜单中选择“提交”,提供提交注释,做手术。”

进程间合作(例如传递某种引用)是可以接受的:这两个进程都是我的,但我想避免将工作表的代码绑定到主进程中。

有帮助吗?

解决方案

确实,听起来您正在尝试让进程间通信发生在视图级别,这实际上并不是 Cocoa 的工作方式。如果你将层分开得更多一点,事情就会容易得多。

为什么不想将工作表代码放入其他进程中?它是视图代码,而视图代码本质上是特定于流程的。这里正确的做法可能是向您的插件代码添加一些通用的模态表支持,以及您的守护进程可以调用该代码的 IPC 调用。如果您能让视图对象正常工作,那么尝试将视图对象发送到远程进程将是一场噩梦。

您正在用这种方法对抗框架。

其他提示

您无法将工作表添加到另一个进程中的窗口,因为您最多只能对其他进程中的窗口进行最严格的访问。

请不要这样做。如果可能的话,使交互变得非模态。特别是在提交之类的情况下,在编写提交注释时能够浏览文件要好得多。

OS X 确实有窗口组,但我认为它们不能(轻松)跨越应用程序。

另一件需要考虑的事情是,在 OS X 中,可能会在同一个文件夹上打开多个 Finder 窗口(与 OS 9 不同)。即使你 做过 拥有足够的权限/API 将工作表添加到 Finder 窗口,该窗口的模式不会阻止用户继续使用文件。

(作为一名 Mac 的长期用户,我个人认为这种交互会让我感到厌烦。)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top