题
我想要写可经由标签界面具有在一个单一的窗口中的多个文档的应用程序。我应避免NSDocument架构(基于文档的Cocoa应用程序模板)?据我所知,它支持每个文档仅一个或多个窗口,但反之则不行。
我一直在摔跤这个问题了一段时间,并已建立了那份上NSDocument架构的应用程序,但我不能找出多个文档与单个窗口关联的好办法。
编辑:我想有项目文档窗口除了基本的文档窗口。在这个层面上的复杂性,将它仍然是值得黑客NSDocument架构?苹果没有使用NSDocument架构编写的Xcode(其中以这种方式工作)?
解决方案
我试过shoehorning一个NSDocument应用到一个单一的窗口前几年标签式界面,并结束了几个月我回去之后很沮丧,并重构了文档结构件。这不是不可能的,但你最终周围工作,最后的结果几乎类似于一个适当的NSDocument应用如此多的问题。这是更好地只是重写你确实需要的位,比结了大量的代码只是为了颠覆Cocoa框架。
其他提示
我有同样的项目 - 所以我已经做搜索自己的一点点 - 我想现在在一个窗口中,有一个侧边栏,允许文件之间切换不同的独立文件。
我通过阅读Cocoadev的的的基于文档应用在具有一个窗口,用于所有文档 的参考。它的出现,从MikeTrent的答案,那使用NSDocument是去一个非常可行的方法。你只需要继承NSDocumentController。
我也喜欢 ABHI的想法使用一个无国界的子窗口。
使用基于NSDocument架构不一定是在这种情况下一个坏主意;但它可能需要相当多的haquery的。
这是很可能,你将不得不不但子类NSDocument,而且它更罕见的子类同级NSDocumentController。一旦做到这一点,它应该是一个简单的事情,劫持和避免-makeWindowControllers等窗口相关的方法调用,让你包裹在文档“窗口”无论时尚请你,但仍保留了文档 - 的好处基于应用程序。
的另一种技术,其中我还没有尝试,但打算,是具有用于每个文档无边界窗口。这样一个文档具有一个窗口,其可能或可能不可见。
然后,具有包含实际窗口边界的包装窗口和任意控制以切换边界文档窗口/窗户之间是可见的。文档窗口是包装物,这确保两者都将被连接的子窗口,当被移动的窗口/最小化/关闭/等
对于每个边界文档窗口,包装器窗口具有占位符认为,调整大小时,将调整文档窗口,并且还注入文档窗口的视图到所述响应链(发送到占位符视图任何情况下,将被发送就被传递到占位符的父视图)之前文档窗口的图。
还有一些小细节需要解决,但我认为这种做法将工作做好。