与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()之类的例子,还是我错过了更大的东西?
答案 0 :(得分:0)
最近在Apple Dev论坛上回答了这个问题,并在此处分享:
这里的问题本身不是setlocale,而是阅读 区域设置首先。值得注意的是,newlocale也会返回NULL 你用类似的参数调用它。这失败了,因为没有C风格 您可以在iOS上使用区域设置。在模拟器上这是有效的 因为语言环境代码从OS X中获取语言环境数据(in 的/ usr /共享/环境)。我不确定是否填充了此目录 iOS(我怀疑没有),但这并不重要,因为沙盒不会 让你的过程得到它。