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

4

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

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

当我使用基本的nib文件且未开启本地化时,它表现得很好,但是只要我为该特定nib文件开启本地化(使用Xcode“本地化”选项,该选项在文件检查器中),当执行上述代码时,应用程序会出现以下错误:

-[MyWindowController loadWindow]: failed to load window nib file 'AuthWindow'.

当nib包含一个窗口被本地化时(仅使用一种语言-英语),它才会失败。如果没有配置本地化,则窗口将被加载并正常显示。请问当我使用本地化nib时,是否需要更改初始化窗口控制器的方式?我找不到正确的答案,我是OSX上Cocoa的新手,但对CocoaTouch和iOS开发有一些经验。


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

8

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

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


清理项目(command + shift + k),退出Xcode(command + q),然后重新启动Xcode。 :D - Joey

6

initWithWindowNibName:可以在本地化目录(例如en.lproj/)中定位.nib文件。问题在于,有时Xcode会忘记将一个.xib文件(通常是用来调整界面的XML格式的Interface Builder文件)编译成.nib文件或二进制格式,特别是当.xib文件只是通过单击“本地化...”按钮进行本地化时。

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

重新启动Xcode将解决这个问题,但我不确定原因是什么,也不知道为什么重新启动可以解决问题。


3

这是一个老问题,但我发现跟之前不一样的解决方案。在涉及到的nib文件中,进入identity选项卡确保nib文件的目标成员被勾选。

enter image description here


1
Targets > Build Settings > Copy Bundle Resources下添加xib是另一种做相同事情的方式。我在将xib文件集成到之前引用另一个项目中的xib文件的项目中遇到了这个问题。 - John Chacho

0

我遇到了这样的错误。解决方法是先备份xib文件,然后从Xcode中删除它,重启Xcode,再将其添加回去。真是匪夷所思...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接