nib 本地化时 Cocoa 无法加载窗口 nib 文件

Posted

技术标签:

【中文标题】nib 本地化时 Cocoa 无法加载窗口 nib 文件【英文标题】:Cocoa failed to load window nib file when nib is localized 【发布时间】:2013-05-30 13:59:57 【问题描述】:

我正在尝试在我的简单 Cocoa 应用程序中创建并显示新窗口:

myWindow = [[MyWindowController alloc] initWithWindowNibName:@"MyWindow" owner:self];
[myWindow showWindow:self];

它适用于没有本地化的基本 nib 文件,但是一旦我为这个特定的 nib 文件打开本地化(使用 Xcode“本地化”选项可用的表单文件检查器),应用程序在执行上面的代码时会给我这个错误:

-[MyWindowController loadWindow]: 加载窗口 nib 文件 'AuthWindow' 失败。

在使用本地化 nib 时,是否应该更改初始化窗口控制器的方式?仅当包含窗口的 nib 已本地化(仅使用一种语言 - 英语),当没有配置本地化时 - 窗口已加载并按应有的方式显示在屏幕上时,它才会失败。我找不到正确的答案,我是 OSX 上的 Cocoa 新手,但对 CocoaTouch 和 ios 开发有一些经验。

【问题讨论】:

我认为当您本地化文件时,Xcode 会创建一个新文件夹并将特定语言的每个文件放在其对应的文件夹中。之后,您的文件路径 MyWindow 不再有效,因为它已被移动(或复制)到子目录。不幸的是,我正在度假,无法为您提供答案。但也许这让你开始调查;) @HAS 是的,我知道这一点。当涉及到 nib 路径时,一切似乎都是正确的,创建了 en.lproj 文件夹并将本地化的 nib 移动到该文件夹​​。我可以毫无问题地在 Xcode 中打开和编辑 nib。我虽然当我调用 initWithWindowNibName 它应该为当前(?)语言的本地化笔尖选择正确的路径。我找不到关于加载本地化笔尖的任何提示,所以我认为这应该与非本地化笔尖完全相同,但也许我错了。 【参考方案1】:

我重新启动了 Xcode,错误消失了……

我不知道……但无论如何……

【讨论】:

清理项目(command + shift + k)并退出xcode(command + q)并重新启动xcode。 :D【参考方案2】:

initWithWindowNibName: 可以在诸如en.lproj/ 的本地化目录中找到.nib 文件。问题是,有时 Xcode 忘记将 .xib 文件(一个 XML 格式的 Interface Builder 文件,您通常使用)编译成一个 .nib 文件,或者二进制格式 - 特别是当 .xib 文件只是通过单击“本地化...”按钮进行本地化时。

如果你打开$build_dir/Your.app/Contents/Resources/$locale.lproj你会发现一些xibs只是从源目录复制的。

重新启动 Xcode 会解决这种情况,但我不确定原因是什么以及为什么重新启动会奏效。

【讨论】:

【参考方案3】:

这是一个老问题,但我找到了与上述不同的解决方案。在有问题的 nib 中,转到标识面板并确保选中 nib 的目标成员资格。

【讨论】:

Targets > Build Settings > Copy Bundle Resources 并添加 xib 是做同样事情的另一种方法。在将 xib 文件集成到以前引用另一个项目中的 xib 文件的项目中时,我遇到了这个问题。【参考方案4】:

我遇到了这样的错误。为我解决的问题是制作 xib 文件的备份副本,将其从 xcode 中删除,重新启动 xcode,然后将其添加回来。去图...

【讨论】:

以上是关于nib 本地化时 Cocoa 无法加载窗口 nib 文件的主要内容,如果未能解决你的问题,请参考以下文章

Cocoa 多次同时加载 nib 模板

Cocoa:使用 nib 加载 NSViewController

Xcode 5 Cocoa 应用程序无法在 OS X 10.6 上加载 Nib

Cocoa - 将 IBOutlet 链接到单独的 Nib

从 Cocoa 中的其他 nib(即 Interface Builder)加载 nib

从情节提要加载的 nib 的 Cocoa replaceSubview