与iOS应用乱搞后,我想我给一个可可应用程序一抡假设事情会非常相似。 所以我有一个拆分视图一个单一窗口的应用程序和一些NSTableView
S(认为的iTunes)和我正在寻找把我的代码,将来自网络获取数据来填充表格的地方。
在iOS中我会把这个在viewDidLoad
适当的方法UIViewController
子类。 该UITableViewDataSource
然后将访问该数据来填充它的细胞。
现在我有一个NSWindow
的,我可以做类似的事情,但我怎么做一个NSWindowController
呢? 这是连我想要什么? 我可以把它放在AppDelegate
,但看起来不正确。
iOS和OS X之间的不同之处在于,只有一个窗口在iOS中,但有可能在OS X多个NSViewControllers
比OS X工作方式不同UIViewControllers
,该NSViewController
设计加载和处理的单一视图,而UIViewControllers
(道歉我相对缺乏的iOS知识),似乎处理多个视图,并提供更多的观点之间的胶水。
即使是苹果的文档写的:
在Mac OS X,AppKit的视图控制器助理窗口控制器,这是最终为云在窗口一切负责。
因此,对口UIViewController
在OS X不是NSViewController
,而是NSWindowController
,这确实提供为OS X的许多内容UIViewController
通过管理个体窗口的整体和布局/内容/意见内相互作用确实为iOS 。
在你的情况,我会用一个NSWindowController
-不过,如果应用程序是非常简单的App Delegate
工作过; 如果应用程序是非常复杂的,然后用NSViewController
分裂的代码不会是一个坏主意。
最好的方式做使用NSWindowController
将使用编程方式加载它在App代表[[CustomWindowController alloc] init]
和
@implementation CustomWindowController
- (id)init
{
self=[super initWithWindowNibName:@"CustomWindowNibName"];
if(self)
{
//perform any initializations
}
return self;
}
@end
或致电
[[CustomWindowController alloc] initWithWindowNibName:@"CustomWindowNibName"];
直接(和覆盖initWithWindowNibName),如果你希望它是可重复使用的。
你可以删除MainMenu.xib默认窗口。
从根本上说,更多的,往往不是一个NSWindowController管理着自己的笔尖文件实例化一个窗口。 该NSWindowController通常拥有该笔尖文件。 (虽然它可能有它管理程序创建的窗口,这不是通常它是如何做。)
为了能够使用自定义NSWindowController
,因此你需要,让您在一个单独的榫/ XIB文件窗口将要管理。 (使用默认的厦门国际银行文件,意味着你允许可可自动实例化一个NSWindowController没有为子类的机会,你不能使用自定义NSWindowController
使用默认NSMainNibFile对于一个简单的应用程序,只是把所有的控制器代码中的NSApplication /应用程序委托。)
在Xcode 4至少,该方法包括创建与所述窗口模板和自定义XIB NSWindowController
类,实例化所述CustomWindowController
基于在-init该笔尖类或其它地方,然后调用[CustomWindowController showWindow:self];
(或者,如果不工作, -makeKeyAndOrderFront:
以获得实际显示窗口(中- (void)applicationDid/WillFinishLaunching:(NSNotification *)aNotification
可能是一个不错的地方)。
要显示我刚刚删除它停止默认窗口。 有可能是一个更好的办法,但我不知道。
文章来源: (Cocoa) What's the equivalent of a UIViewController subclass in a single window cocoa app?