Iphone 如何为本地化应用加载XIB?
我发现,在模拟器上成功运行和调试本地化应用程序几天后,它(或XCode部署过程)进入一种状态,如果模拟器设置为我支持的本地语言之一,它将在启动时崩溃,堆栈如下:Iphone 如何为本地化应用加载XIB?,iphone,localization,ios-simulator,Iphone,Localization,Ios Simulator,我发现,在模拟器上成功运行和调试本地化应用程序几天后,它(或XCode部署过程)进入一种状态,如果模拟器设置为我支持的本地语言之一,它将在启动时崩溃,堆栈如下: 3 CoreFoundation 0x01780e6a +[NSException raise:format:] + 58 4 UIKit 0x008050fa -[UINib instantiateWithOwner:opti
3 CoreFoundation 0x01780e6a +[NSException raise:format:] + 58
4 UIKit 0x008050fa -[UINib instantiateWithOwner:options:] + 2024
5 UIKit 0x00806ab7 -[NSBundle(UINSBundleAdditions) loadNibNamed:owner:options:] + 168
6 UIKit 0x0060c17a -[UIApplication _loadMainNibFile] + 172
7 UIKit 0x0060ccf4 -[UIApplication _runWithURL:payload:launchOrientation:statusBarStyle:statusBarHidden:] +
8 UIKit 0x00617617 -[UIApplication handleEvent:withNewEvent:] + 1533
9 UIKit 0x0060fabf -[UIApplication sendEvent:] + 71
10 UIKit 0x00614f2e _UIApplicationHandleEvent + 7576
11 GraphicsServices 0x01e13992 PurpleEventCallback + 1550
发生崩溃是因为UIWindow应用程序无法加载MainWindow.nib文件:
由于未捕获而终止应用程序
例外
“NSInternalInconsistencyException”,
原因:“无法在捆绑包中加载NIB:
“NSBundle
/.app>
(已加载)“名称为”主窗口“
当你本地化一个应用程序时,你有两个选择。您可以执行以下一项(或两项)操作:
- 根据设备上的语言本地化加载的每个Xib文件。因此,您的本地化UI完全是从Interface Builder配置的
- 您可以为每个语言目标设置Localizable.strings文件,并从代码中访问其中的字符串李>
- 这只是模拟器中的一个bug吗所以对这一点有很大的反对意见
- 还有其他人有这个问题吗是
- 这是因为我不小心切换了一些模糊的XCode设置吗不,看起来不像
我尝试了McCygnus建议的修复方法(删除我的XIB的所有本地化,这会将它们移回根目录),并为我排序。所以我猜本地化系统会检查当前的语言目录,然后检查根目录,它不会返回到默认语言 我最近遇到了这个问题,当时我有一个英文版的nib,但没有将它本地化为任何其他语言(MyNib是en.lproj)。模拟器只在其他语言目录(da.lproj、de.lproj等)中查找MyNib,如果找不到,则不会返回到英文版本。我通过删除nib的英语本地化来修复它。这导致它与其他资源一起位于应用程序包的根目录中,而不是位于en.lproj中。从那以后,一切都很顺利
我有点困惑,因为我认为本地化系统按照用户的首选顺序检查了所有语言,而开发人员通常使用英语作为总括。我不确定这是加载行为的改变还是模拟器的错误(我从未在设备上尝试过)。我猜是后者,但我不确定。这提醒了我,我需要提交一份关于它的bug报告。有相同的症状,但不同的根本原因,我想与大家分享。正如McCygnus暗示的那样,我取消了本地化(谢谢),但仍然只有iPad例外。事实证明,我的Info.plist文件包含一个指向特定于iPad的主窗口nib文件(MainWindow iPad.nib)的链接。去掉这个之后,一切都正常了 如果您正在使用
[[Class alloc] initWithNibName:@"aNibName" bundle:nil];
换成
[[Class alloc] initWithNibName:@"aNibName" bundle:[NSBundle mainBundle]];
我只需重新启动xcode就可以解决这个问题=/ 这听起来像是同一个问题。我想我们中的一个或两个应该把它记录下来:)我也有这个问题。它可以在模拟器和设备上复制。我只看到一个困难的解决方案——将相同的.xib文件添加到每个.lproj文件夹。这在逻辑上似乎不正确,但我找不到其他解决办法。有什么想法吗?@berec所以你想确定你所有的xib都在根目录中。如果它们不在特定语言的目录中,你可以在en.lproj中找到它们。我现在很生气,我花了两个小时查找这个问题,最后一个简单的关闭xcode并重新进入就成功了!天哪!我逐渐了解到,在5分钟后,无论出现什么类型或奇怪的问题,重启xcode几乎总是值得一试的。它的工作频率太高了。