使用Apple OS X Cocoa框架,如何在另一个进程的窗口上发布表(向下滑动模式对话框)?
修改:澄清一下:
我的应用程序是一个Finder扩展,用于执行Subversion版本控制(http://scplugin.tigris.org/)。我的应用程序的一部分是插件(Finder的上下文菜单项);然而,我的应用程序的大部分是在一个单独的守护进程中。出于几个原因,我们选择将几乎所有代码放入守护进程;插件只定义了菜单本身,Apple-Events定义了守护进程。
有时候,守护进程需要提示用户提供更多信息。它可以在屏幕上为此抛出一个窗口,但这是破坏性的(随机定位),在我看来这里的工作流程是合法的模态,例如“从菜单中选择一个文件,选择'提交',提供提交注释,做手术。“
进程间协作(例如传递某种引用)是可以接受的:两个进程都是我的,但我想避免将表单的代码绑定到主进程。
答案 0 :(得分:5)
实际上,这听起来好像是在尝试让您的进程间通信在视图级别进行,这实际上并不是Cocoa的工作方式。如果你将你的图层分开一些,事情就会容易得多。
为什么不将表单代码放入其他进程?它是视图代码,视图代码本质上是特定于进程的。在这里做正确的事情可能是为你的插件代码添加一些通用的模态表支持,以及你的守护进程可以召唤该代码的IPC调用。试图将视图对象传送到远程进程将是一种噩梦,如果你可以使它工作。
你正在用这种方法对抗框架。
答案 1 :(得分:2)
您无法在另一个进程中向窗口添加工作表,因为您在其他进程中最多只能访问窗口。
答案 2 :(得分:1)
请不要这样做。尽可能使交互非模态化。特别是在提交方面,在编写提交注释时能够浏览文件会更好。
OS X确实有窗口组,但我认为它们不能(轻松)跨越应用程序。
答案 3 :(得分:1)
另一件需要考虑的事情是,在OS X中,可以在同一文件夹上打开许多Finder窗口(与OS 9不同)。即使您 有足够的权限/ API来向Finder窗口添加工作表,也不会像该窗口的模式那样阻止用户继续使用这些文件。
(我个人认为,作为一个长期的Mac用户,这种互动会让我一路走来。)