【问题标题】:setlocale works in iOS Simulator but fails on devicesetlocale 在 iOS 模拟器中工作,但在设备上失败
【发布时间】:2015-09-15 19:45:20
【问题描述】:

this previous question 的作者不同,我遇到了相反的问题。我试图在我的 iPad 应用程序中使用用 C++ 编写的组件,该组件使用标准 C 库中的 setlocale()。通过模拟器(i386 或 x86_64)运行时,我能够成功设置语言环境并获得预期的返回值:

(lldb) p (const char *)setlocale(2, "ja_JP")
(const char *) $1 = 0x000000010e776bd0 "ja_JP"

但是,在设备上运行时(在 iOS8 或 iOS9 上,在 armv7 和 arm64 设备上),此调用似乎总是失败并返回 null。

(lldb) p (const char *)setlocale(2, "ja_JP")
(const char *) $0 = 0x00000000

实际上在 iOS 设备上设置区域和语言似乎也没有什么区别。

这是像 iOS9 这样阻止使用 sysctl() 的例子,还是我在这里遗漏了更大的东西?

【问题讨论】:

    标签: ios localization


    【解决方案1】:

    这实际上是最近在 Apple Dev Forums 上回答的,也在这里分享:

    这里的问题不在于 setlocale 本身,而在于阅读 首先是语言环境。值得注意的是,newlocale 也返回 NULL 时 你用类似的参数调用它。这失败了,因为没有 C 风格 您可以在 iOS 上使用语言环境。在模拟器上这有效 因为语言环境代码从 OS X 中获取语言环境数据(在 /usr/share/locale)。我不确定此目录是否已填充 iOS(我怀疑不是)但这没关系,因为沙箱不会 让你的流程来处理它。

    【讨论】:

      猜你喜欢
      • 2012-05-16
      • 1970-01-01
      • 1970-01-01
      • 2015-10-15
      • 1970-01-01
      • 1970-01-01
      • 2014-06-18
      • 1970-01-01
      • 2023-03-24
      相关资源
      最近更新 更多