如何为本地化应用程序加载 XIB?

2023-11-21

我发现在模拟器上成功运行和调试本地化应用程序几天后,它(或 XCode 部署过程)进入了一种状态,如果模拟器设置为我支持的本地语言之一,它会在启动时崩溃以下堆栈:

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

发生崩溃是因为 UIApplication 无法加载 MainWindow.nib 文件:

由于未捕获而终止应用程序 例外 'NSInternalInconsistencyException', 原因:“无法在捆绑包中加载 NIB: 'NSBundle /.app> (已加载)',名称为“MainWindow”

当您本地化应用程序时,您有几个选择。您可以执行以下一项(或两项)操作:

  • 根据设备上的语言本地化加载的每个 Xib 文件。因此,您的本地化 UI 完全是通过 Interface Builder 配置的。
  • 您可以为每种语言目标设置一个 Localized.strings 文件,并从代码访问其中的字符串。

我选择了后者,因为我希望所有本地化字符串都放在一个位置(这样就可以一次全部翻译)。这意味着我的项目中的语言特定目录中没有任何 xib 文件(fr.lproj、zh-Hant.lproj 等...)。相反,我有 en.lproj 充满了我的所有 xib 文件(构建后的 nib 文件)和包含相应翻译的 Localizable.strings 文件的语言特定目录。

正如我提到的,这几天一直运行良好。今天(我不确定具体在什么时候),模拟器上的应用程序在启动时开始崩溃。在设备上安装应用程序运行良好,并在模拟器上以英语模式运行应用程序运行良好。

经过大量的填充后,我意识到模拟器正在崩溃,因为它正在特定于语言的目录中查找其 nib 文件(fr.lpro、sz-Hant.lproj、ja.lproj,具体取决于语言设置)。

因此,模拟器在无法在语言特定目录中找到笔尖后,似乎处于不查找默认语言目录 (en.lproj) 的状态。

我通过进入模拟器的应用程序目录解决了这个问题(基于上面的异常消息):

/用户/.../库/应用程序 支持/iPhone 模拟器/4.3/Applications//.app

然后进入特定于语言的子目录并将所有 nib 文件从 en.lproj 复制到该目录中。

手动复制文件后,模拟器加载特定于语言的 nib 文件(实际上只是 en.lproj 目录中文件的副本),一切正常。

所以我的问题是:

  • 这只是模拟器中的一个错误吗?所以对此坚决反对
  • 有没有其他人有这个问题?Yep
  • 这是我不小心切换了一些晦涩的 XCode 设置的结果吗?不,看起来不像

Update

今天发现这个问题不仅仅局限于模拟器,设备上也会出现这种情况。因此,我上面描述的解决方法(将笔尖从默认语言目录复制到目标语言目录)显然在手机上不起作用。

我尝试了 McCygnus 建议的修复(删除我的 xib 的所有本地化,这将它们移回根目录)并为我排序。所以我猜本地化系统会检查当前的语言目录,然后检查根目录,它不会回退到您的默认语言。


我最近遇到了这个问题,当时我有英文版本的笔尖,但没有将其本地化为任何其他语言(MyNib 在 en.lproj 中)。模拟器仅在其他语言目录(da.lproj、de.lproj 等)中查找 MyNib,如果找不到,则不会回退到英语版本。我通过删除笔尖的英语本地化来修复它。这导致它与其他资源一起位于应用程序包的根目录中,而不是位于 en.lproj 中。之后一切都很顺利。

我对此有点困惑,因为我认为本地化系统会按照用户的首选顺序检查所有语言,而开发人员通常使用英语作为包罗万象的语言。我不确定这是否是加载行为的变化或模拟器错误(我从未在设备上尝试过)。我猜是后者,但我不确定。但这提醒我我需要提交一份错误报告。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何为本地化应用程序加载 XIB? 的相关文章

  • IOS - 如何创建具有模糊背景的 Facebook 反应栏?

    虽然这周可能不会复制 Facebook 的某些设计 但我希望能够设计我自己的下面的反应指示器视图版本 我有三个UIImageViews 排列在与上面相同的位置 问题是 与 Facebook 不同 背景颜色可能会改变 即位于UIBlurEff
  • 签名仅对临时无效

    我不确定我的临时项目发生了什么变化 但在尝试安装时出现此错误 应用程序未通过协同设计验证 签名无效 或者不是用Apple提交证书签名的 19011 设备调试构建良好 与我的临时配置文件关联的证书直到 2011 年才会过期 我搜索了 Goog
  • 在 iPhone 应用程序中获取路线和路线导航

    我正在开发一款应用程序 该应用程序将重点关注在驾驶时为用户提供路线和逐段指示 他们在驾驶过程中留在应用程序中非常重要 因此我真的不想让他们离开应用程序并转到内置的地图应用程序 我最近对如何包含此功能进行了大量研究 众所周知 这并不容易 因为
  • iPhone UIWebview——保存已下载的图像

    我有一个带有嵌入式 UIWebview Safari 控件的 iPhone 应用程序 我希望能够在本地存储某些网页的图像 我可以通过编程方式访问UIWebview下载图像的路径吗 或者我需要解析HTML 然后去网上找到图像资源并再次下载 我
  • 如何在 iOS 企业帐户中创建开发人员配置文件请求?

    我们有 iOS 企业帐户 现在我们想要向我们的团队添加一名开发人员 该开发人员将创建一个开发人员配置文件 问题是新添加的开发人员在他的苹果帐户中看不到配置文件标签 任何人都知道新添加的开发人员如何创建配置文件 感谢您 Steps 您可以通过
  • 应用程序关闭时下载报刊亭应用程序

    我正在实现一个报摊杂志应用程序 它通过 Urban Airship 推送通知接收新期刊 只要应用程序位于前台或后台 这就可以正常工作 但据我所知 当应用程序完全关闭时也应该触发下载 但发送推送 content available 1如果我的
  • 关闭 iPhone 网络应用程序

    我想关闭或最小化 隐藏 全屏 iPhone Web 应用程序 这个怎么做 window close 不起作用 你不能 您无法从 JavaScript 中退出浏览器 但你可以尝试让浏览器崩溃 但这并不是一个好主意
  • SKLightNode 无法在真实设备上工作 [iPhone 5]

    我建立了一个简约的项目here http override apps com wp content uploads iOS8 Test zip它只是添加一个红色方块 然后点击屏幕后 一个光源照亮它 在模拟器上它运行良好 但在我的 iPhon
  • 特别分发:应用程序安装失败

    我已经为我尝试分发的应用程序创建了一个临时存档和一个 ipa 文件 我还创建了一个分发配置文件 其中包含我计划将应用程序分发到的设备的 UDID 当我将 ipa 和 mobileprovision 文件拖到 iTunes 中并尝试将应用程序
  • 如何以编程方式创建选项卡栏

    大家好 我有基于导航的应用程序 其中我也需要在视图之一中实现选项卡栏 在一个视图中我需要 5 个选项卡 有人可以建议我以编程方式创建选项卡栏吗 每个选项卡应导航到另一个 xib 建议始终受到赞赏 问候 以下是 Apple 提供的用于以编程方
  • 如何在 iPhone 中查找本周的最后一天?

    在我的应用程序中 我使用以下代码来检索当前日期和星期 NSDate today1 NSDate date NSDateFormatter dateFormat NSDateFormatter alloc init dateFormat se
  • Flipboard 动画

    有谁知道如何构建像 Flipboard 应用程序一样的翻转动画 谢谢 如果你指的是翻页过渡 请查看我编写的 OpenGL 过渡类 https github com epatel EPGLTransitionView https github
  • iPhone Mobile Safari:强制键盘打开

    这是一个 HTML CSS JS jQuery iPad 应用程序 我有一个按钮 可以向下滑动输入表单 我想让用户将注意力集中在输入上 然后启动键盘 这是我正在处理的 但不起作用 myFormField focus 这确实集中了输入 但无法
  • iPhone:每日本地通知

    我正在尝试实现本地通知 这就是我所设置的 Current date NSDate date NSDate date Add one minute to the current time NSDate dateToFire date date
  • Xcode - 发布和分发配置中的 Malloc_Error

    仅当我在设备上选择发布或分发配置时 我才会收到此错误 在模拟器上它运行良好 请问 我错在哪里 cc1obj 4113 malloc mmap size 429379584 failed error code 12 error can t a
  • 从设备获取联系人列表时出现问题

    这段代码有什么问题 NSMutableArray contactArray NSMutableArray alloc init ABAddressBookRef addressBook ABAddressBookCreate CFArray
  • 检测 iPhone 屏幕是否打开/关闭

    有没有办法检测 iPhone 的屏幕是打开还是关闭 例如 当按下手机的屏幕锁定按钮时 我一直在使用 void applicationWillResignActive UIApplication application 为此类事件做准备 在大
  • iPhone Dev:从子控制器和 TabBar 中的另一个控制器重新加载表视图的数据

    我正在实现一个笔记管理器应用程序 它在 tabBar 中有一个 tableView 其中显示其笔记的主要信息 访问一个注释时 您可以编辑其属性 在 tabBar 的一个按钮中 您可以选择注释在 tableView 中的显示方式 我遇到的问题
  • 如何检测 UITableView 中某个单元格的双击?

    如何检测某个单元格上的双击UITableView i e 如果用户进行了一次触摸 我想执行一个操作 如果用户进行了两次触摸 我想执行另一个操作 我还需要知道进行触摸的索引路径 我怎样才能实现这个目标 Thanks 如果您不想创建子类UITa
  • 移动物体而不实际接触物体

    我是 iPhone 开发的初学者 我一直在寻找这个问题的答案 但还没有找到任何东西 我想做的是允许用户移动对象而无需实际触摸该对象 他们可以触摸屏幕上的任何位置 并且当他们移动时 对象将从原来的位置向用户的方向移动移动但不会跳到他们的触摸位

随机推荐

  • JDK8 无法与 JDK8(WS 客户端)一起使用

    我有一个非常简单的 现有的 Web 服务 我想使用 JDK8 生成一个 Web 服务客户端 我使用的是纯 JDK8 工具链 这意味着我使用 JDK8 目录中的 wsimport 工具 现在问题来了 JDK8 中的 wsimport 工具生成
  • Angular2 异常没有字符串提供者

    我有一个使用 ng cli 创建的全新应用程序 用这个非常简单的代码 import Component from angular core Component selector app root templateUrl app compon
  • 替换字符串中字符的所有实例的最快方法[重复]

    这个问题在这里已经有答案了 在 JavaScript 中替换字符串中字符串 字符的所有实例的最快方法是什么 Awhile a for loop 正则表达式 最简单的方法是使用正则表达式g替换所有实例的标志 str replace foo g
  • 连接管理器 unregisterNetworkCallBack 已取消注册

    在我的 Android 应用程序中 我正在取消注册活动的网络回调 onPause 有时我会遇到错误 原因是 java lang IllegalArgumentException NetworkCallback was already unr
  • Django 中的 URL 路径参数与查询参数

    我已经环顾了一段时间 似乎找不到任何涉及差异的东西 正如标题所述 我试图找出通过 url 路径参数获取数据的区别 例如 content 7然后在 urls py 中使用正则表达式 并从查询参数中获取它们 例如 content num 7 u
  • ASP.NET -- IIS7 -- IBM DB2 问题

    我正在开发一个调用 DB2 数据库的 ASP NET 网站 我在将托管该站点的 Windows 2008 服务器上安装了 Visual Studio 当我使用集成 Web 服务器在 Visual Studio 中调试站点时 我可以连接到数据
  • 将 NSAttributedString 添加到 UIBarButtonItem

    我正在尝试在后栏按钮项目上设置属性字符串 这是我第一次尝试属性字符串 这是代码 self navigationItem hidesBackButton true let barButtonBackStr lt Back var attrib
  • 用作索引器键的打字稿文字类型

    有没有什么方法可以定义可以用作索引器中的字符串键的打字稿文字类型 type TColorKey dark light interface ColorMap period TColorKey Color 这会引发错误 An index sig
  • 在执行shell中获取Jenkins环境变量

    我想知道是否可以在配置构建中的执行 shell 内访问 Jenkins 环境变量 如果是这样 你能给我举个例子吗 我需要将环境信息与测试的一些输出结合起来 以提供完整的运行报告 不使用插件 Please check http yourjen
  • 使用 HTML5 和 JavaScript 从视频中捕获帧

    我想每 5 秒从视频中捕获一帧 这是我的 JavaScript 代码 video addEventListener loadeddata function var duration video duration var i 0 var in
  • 如何在猫鼬模型上使用partialFilterExpression

    我创建了一个带有电子邮件字段的猫鼬模型 如果用户提供了值 我希望它是唯一的 但如果用户未提供任何值 我希望它为空 我在这里找到了一个很好的 mongodb 参考 https docs mongodb com manual core inde
  • Python Pandas 动态创建 Dataframe

    下面的代码将生成所需的输出ONEdataframe 但是 我想在 FOR 循环中动态创建数据帧 然后将移位后的值分配给该数据帧 例如 数据帧 df lag 12 将仅包含column1 t12 和column2 12 任何想法将不胜感激 我
  • Android 蓝牙socket非阻塞通信教程

    我正在寻找 Android 上的蓝牙示例代码来进行非阻塞套接字通信 我找到了几个例子 例如BluetoothChat或BluetoothSocket java 但没有一个是non blocking socket communication
  • keybd_event KEYEVENTF_EXTENDEDKEY 需要解释

    In 文档它说 KEYEVENTF EXTENDEDKEY 0x0001 如果指定 则扫描码前面有一个值为 0xE0 224 的前缀字节 有人可以解释这是什么意思吗 这有什么区别 keybd event RIGHT 0 0 0 keybd
  • 确保 C# 中的多播委托执行列表顺序?

    经过一些阅读后 我了解到处理程序调用顺序与订阅顺序相同 但不能保证 所以可以说我有 public event MYDEl ev 订阅者会 ev GetPaper ev Print ev EjectPaper 保留 确保执行列表顺序的最佳实践
  • Android studio 3.0 无法上传仅测试的 apk

    我刚刚将我的旧项目更新为 as3 0 并构建并签署了我的应用程序 当我想上传到谷歌播放后 您不能上传仅测试 apk 有什么帮助吗 这是Android Studio 3 0的新功能 当您在 Android Studio 中按 运行 按钮执行任
  • 使用 flutter_local_notifications 和位置包时出现 flutter 错误“Android dependency 'androidx.core:core' has different version”

    美好的一天 我尝试制作一个带有 Android 和 ios 通知的简单天气应用程序 为此我使用基础 flutter 应用程序和库flutter local notifications 0 5 1 2 and location 2 0 0 但
  • 为什么maven项目有一个src文件夹,其中有两个空的子文件夹(main和test)

    我是java世界的新手 我创建了一个简单的 java maven 项目 我看到了包 一切都运行良好 但是我确实看到一个 src 有两个空的主文件夹和测试文件夹 知道为什么吗 编辑 在答案中添加更多信息 下面的答案很完美 然而 经过更多的修改
  • 将批处理文件中的修改文件日期与当前日期进行比较

    我需要编写一个批处理文件来做一些事情 最初我认为我的问题非常简单 捕获位于指定目录中的 txt 文件的修改日期 将该日期与当前日期进行比较 如果它们相同则执行某些操作 如果不是 那就做其他事情 我用来捕获当前日期的行是 date 我用来捕获
  • 如何为本地化应用程序加载 XIB?

    我发现在模拟器上成功运行和调试本地化应用程序几天后 它 或 XCode 部署过程 进入了一种状态 如果模拟器设置为我支持的本地语言之一 它会在启动时崩溃以下堆栈 3 CoreFoundation 0x01780e6a NSException