【发布时间】:2014-04-26 15:44:09
【问题描述】:
我是一位经验丰富的 iOS 开发人员,最近开始着手构建他的第一个 Mac OS 应用程序。到目前为止一切顺利,但我遇到了一个奇怪的问题。
我有一个单一的窗口应用程序(从默认的 MainMenu.xib 文件启动),它将一些 NSViews(从我创建的自定义 NSViewControllers)推送到 NSWindow contentView。
这在我运行 Mountain Lion 的 Macbook Air 以及运行最新版本 Mavericks 的另一台 Macbook Pro 视网膜上运行良好。但是,我也有第三台运行 Mavericks 的设备,我只是得到一个没有视图的空白屏幕窗口。
所以这是窗口结构:
NSWindow (custom NSWindow object, initiated with NSBorderlessWindowMask)
--> NSWindow has a background view, with a solid colour
然后,对于需要在窗口中显示的内容,我有以下结构:
NSViewController (main)
--> NSViewController sub 1. View is added to the ViewController above
--> NSViewController sub 2. View is added to the ViewController above
--> NSViewController sub 3. View is added to the ViewController above
然后我将主 NSViewController(包含视图的子部分)添加到窗口的 contentView
self.mainViewController = [[MainViewController alloc] initWithNibName:@"MainViewController" bundle:nil];
[self.window.contentView addSubview: self.mainViewController.view];
[self.window.contentView setNeedsDisplay:YES];
self.mainViewController.view.frame = ((NSView*) self.window.contentView).bounds;
在我遇到问题的 Mavericks 设备上,我只能看到 NSWindow 及其背景视图。在其他所有设备上,一切正常。
【问题讨论】:
-
您在哪里创建其他视图控制器?在xib还是手动?
-
其他视图在 MainViewController 中创建,也从 XIB 文件加载(通过代码)。它们被添加为 MainViewController 的子视图。
-
如果其他视图控制器位于 xib 的根级别,请确保在创建 outlet 时使用“strong”,因为它们不会被保留。
-
子视图控制器以与 MainViewController 中的 mainViewController(initWithNibName 等)类似的方式初始化,然后将这些视图控制器视图添加到 self.view。 MainViewController 的 XIB 文件不包含对子视图的 XIB 的直接引用。它们也被妥善保留,应该没有问题。
-
问题系统在捆绑包中没有 NIB 资源的可能性有多大?所有构建和安装的东西都一样吗?
标签: objective-c cocoa osx-mavericks