基础国际化和多个故事板不能正常工作

时间:2013-02-08 13:20:38

标签: ios ipad internationalization storyboard

我在xCode 4.6上玩多个故事板和基础本地化。事实上我

我做了:

1)编辑我的项目信息localisations:选中“Use Base Internationalization”并添加语言:英文,中文

2)创建一个名为“anotherstoryboard.storyboard”的新故事板

3)使用Base国际化本地化我的新故事板(文件检查器/本地化 - 本地化)。

4)在我的app委托中,我动态加载我的本地化故事板,如下所示:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"anotherstoryboard" bundle:nil];

案例1: =>作品

对于我的新故事板(步骤3),我选择Localization Chinese - Interface Builder Cocoa Touch Storyboard

enter image description here

它有效,但现在我必须维护本地化的故事板,用IB编辑它们。我不想要这样的行为,我只想使用基础国际化和本地化.strings文件。

案例2: =>崩溃

对于我的新故事板(步骤3),我选择Localization Chinese - Localizable Strings

enter image description here

该应用程序崩溃,说无法找到我的故事板

'NSInvalidArgumentException', reason: 'Could not find a storyboard named 'anotherstoryboard' in bundle NSBundle </Users/me/Library/Application Support/iPhone Simulator/6.1/Applications/8E036C84-6058-4420-94B4-1726E1F686AD/HelloWorld.app> (loaded)'

我做错了什么?为什么iOS在案例2中找不到合适的故事板?

11 个答案:

答案 0 :(得分:14)

在Xcode 4.6.2中开始本地化新的故事板后,我刚刚遇到了同样的问题。我检查了所有内容都按照这里和其他地方的建议正确设置,确实是。

对我来说,通过在Xcode中关闭项目并从Finder手动清除Xcode“Derived Data”目录(请参阅Xcode首选项)来解决问题。然后我重新打开了这个项目,做了一个干净的构建,并且故事板得到了正确编译并按预期工作。

答案 1 :(得分:3)

您收到此错误是因为对于iOS 6(Base Internationalization需要),故事板文件会被编译到storyboardc文件中。它还将属于它的字符串文件复制到目标。因此,在iOS 6设备上没有.storyboard文件。

要编译故事板文件,您需要确保它位于Copy Bundle Resources构建阶段。然后故事板编译器(参见构建规则)启动并应该编译它。如果没有,那么这是一个错误,你应该报告它。

答案 2 :(得分:2)

我尝试的完全和你一模一样,我可以说这个错误会在你展示时发生。

解决方案是从目标构建阶段中删除并添加故事板文件。因此,请点击图片Build Phases of a target

中显示的目标

然后从构建阶段中删除故事板文件并再次添加。

这对我有用!

答案 3 :(得分:1)

点击Project Navigator内的项目,选择您的项目,然后选择顶部的Info。接下来,您必须取消选择Use Base Internationalization,然后点击“删除”。

enter image description here

答案 4 :(得分:1)

我通过将我的故事板拖动到finder,然后删除Xcode侧面板中的那个,然后将我最初拖动到finder的那个重新添加回Xcode侧面板来解决了这个问题。然后删除“复制捆绑资源”中的旧RED故事板文件,并通过拖动它手动添加新的故事板。

答案 5 :(得分:1)

我遇到了同样的问题,花了2天时间来解决它。

当然我尝试了以上所有方面,例如: 清洁工程, 重置iOS模拟器中的内容和设置, 删除/ Users / YourUsername / Library / Application Support / iPhone Simulator中的所有文件, 删除/ Users / YourUsername / Library / Developer / Xcode / DerivedData中的所有文件, 删除iOS设备中的应用程序

并没有任何帮助我解决我的问题 - 使用Base Internationalization + Storyboard.strings的故事板本地化并不能编译本地化的故事板。

原因是该项目以前针对的是iOS 5.1,但现在针对的是iOS 6.1。更改项目部署目标后,我忘记更改故事板中的编译设置。

有什么帮助我 - 只需改变&#34;构建&#34;至少&#34; iOS6.1及更高版本&#34;在故事板的文件检查器中。

enter image description here

答案 6 :(得分:0)

在故事板本地化设置中,尝试删除“基本”选项旁边的复选框。在iOS6

下不支持

答案 7 :(得分:0)

由于这是一个警告而不是错误,我起初并不认为这会是一个问题,但最终它是我唯一的负载。在右侧边栏,最左边的选项(看起来像文档的图标),我看到一个Localization部分有两个复选框,Base和English。基地被检查,英语未经检查。

enter image description here

相反,我检查了英语,然后将下拉菜单更改为Interface Builder。然后我取消选中Base。

enter image description here

当我再次检查构建规则时,Main.storyboard不再是红色。当我试图再次在5.1模拟器中运行应用程序时,它就好了。注意:只需检查英语/界面生成器就足以让应用程序在iOS 5.1中运行,但是你会遇到一个问题,即故事板的更新不会反映出来。您需要取消选中Base,以便英语是故事板的唯一版本;这样,只要你重新运行,就会立即反映出更新。

答案 8 :(得分:0)

只有 iOS 6 支持基础国际化。

我遇到了和你一样的问题,但更糟糕的是,因为我没有在iOS 5上测试过。我知道很多用户遇到崩溃后才知道这件事。

所以,请注意。

我的blog有关于此的详细信息。正如您所知,xib仍然有效。因此,将所有字符串转换为xib(根本不是很难)。

答案 9 :(得分:0)

已解决

我对某些阿拉伯语翻译有疑问。我已经尝试了帖子中提到的所有可能方法,但没有一个对我有用。

最后,我发现我的Xcode没有在故事板的字符串文件中报告错误!我修复了字符串文件中的问题,我的应用程序按预期运行!

(提示:您也可以检查控制台中的错误)

答案 10 :(得分:0)

如果Storyboard.strings文件中存在语法错误,例如缺少;或缺少“”,似乎没有任何警告(Xcode 10.2.1),并且您在Storyboard.strings文件中没有任何本地化版本。

在以下几行中,文本的颜色没有改变,表明存在问题。

您最好的选择是逐行进行,并确保没有遗漏任何东西。