NSWindowController与NSViewController之间的区别

rus*_*ord 27 cocoa cocoa-touch objective-c nswindowcontroller cocoa-design-patterns

我来自iOS背景并开始学习Cocoa.在iOS上,除非我们有多个目标iPad,iPhone我们通常有一个窗口并使用管理屏幕UIViewControllers.每个新屏幕大部分时间都会映射到一个UIViewController.

然而,对于可可,这似乎是一个新的屏幕/窗口管理的地方NSWindow,它的子组件由管理NSViewController.因此,如果我有多个窗口应用程序,我应该NSWindowController为每个窗口分开.

这种方法是正确的还是我有误解?

小智 13

通过iPhone SDK和Leopard SDK,他们引入了视图控制器,或NSViewController和UIViewController.正如他们的名字所示,他们所做的就是管理观点

视图控制器用于管理视图.UI设计的当前趋势是单窗口,多视图.这意味着有一个窗口,在其中,为不同目的设计的不同视图组可以交换进出.因此,视图控制器为程序员处理完善的模式.目前,视图控制器对于iPhone和iPod touch编程非常重要,因为该平台基于单窗口和多视图模型.但是,在我看来,使用视图控制器对Mac来说非常流行.像NSWindowController这样的窗口控制器怎么样?它的对应物UIWindowController不适用于iPhone和iPod touch环境,因为这些环境只有一个窗口.与视图控制器不同,NSWindowController用于基于文档的程序.那么,基于文档的程序可以使用多个窗口.因此,可以合理地认为NSWindowController用于基于文档的程序,正如Apple的文档所述.


Nic*_*ari 5

我也来自 iOS,不久前开始编写 Mac 应用程序,主要从 Apple 的文档中学习。

我的印象是,在桌面上,您几乎不需要NSViewControllers(一个很大的例外是带有选项卡和多个视图的窗口,例如 GarageBand 欢迎屏幕)。

大多数情况下,NSWindowController每个窗口都有一个。首先了解NSWindowNSWindowController(和NSDocument,如果您正在制作基于文档的应用程序)之间的关系。

一旦你做对了,就开始尝试使用NSViewController.


更新:似乎因为Mac 应用程序也引入了故事板,Apple 预计大部分视图呈现逻辑应该从旧版迁移NSWindowController到新版NSViewController,更符合 iOS 应用程序的结构。我不太了解究竟在哪画线,或者什么样的代码应该保留在窗口控制器中(或者它是否仍然需要被子类化)。