【问题标题】:Weird issue with NSWindow contentView on MavericksMavericks 上 NSWindow contentView 的奇怪问题
【发布时间】: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


【解决方案1】:

好吧,我确定我本地化的次数比你少,但我首先怀疑缺少 NIB 资源是问题所在,然后是本地化问题,因为 NIB 没有加载,initWithNibName:bundle 确实在寻找本地化的 NIB。

听起来您需要对子视图进行基本本地化以确保它们出现在任何地方,我想这很奇怪。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-26
    • 2011-01-01
    • 1970-01-01
    • 2016-01-01
    • 1970-01-01
    • 2018-07-23
    • 2013-08-06
    • 2015-02-27
    相关资源
    最近更新 更多