- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在本地化我的 iOS 应用程序,并且在模拟器中它每次都以我选择的语言正确运行。
在我的 iPhone 5 上进行测试时,它只会在应用程序首次运行时正确检测到语言。每次我在设备上重新编译和运行我的应用程序时,它都会检测到“en”作为语言,即使我正在测试时选择了 Español(“es”)。
我使用以下方法检测语言:
[[[NSBundle mainBundle] preferredLocalizations] objectAtIndex:0]
我还用过:
[[NSLocale preferredLanguages] objectAtIndex:0]
同样的结果。
如果我在第一次运行后终止应用程序,并在设备上重新启动它,它会继续正确检测语言。
但如果我终止该应用程序,然后在初始运行后通过 Xcode 重新编译/重新启动,它将加载并检测到“en”(英语)。
在那之后,除非我完全删除该应用程序,然后通过 Xcode 重新编译/重新安装/运行该应用程序,否则终止并重新启动该应用程序会持续检测为英语。然后循环重复...随后重建/重新启动而不先从设备中删除应用程序会导致误检测。
我设备上的所有其他应用程序始终以西类牙语显示。整个 UI 以西类牙语显示。
更新:我现在已经在同样运行 iOS 6 的 iPad(第 3 代)上进行了测试,并且遇到了相同的行为。
更新 2:
在 didFinishLaunchingWithOptions 中,我有这段代码来检测语言:(语言是一个 NSString*):
language = [[NSLocale preferredLanguages] objectAtIndex:0];
在这个调试语句之后,比较我得到的值,以及检测它的稍微不同的方式,只是为了调试:
NSLog(@"Detected language: %@/%@", language, [[[NSBundle mainBundle] preferredLocalizations] objectAtIndex:0]);
当应用程序在西类牙语模式下正常运行时,输出显示为“检测到的语言:es/es”,否则显示为“检测到的语言:en/en”。仍然不知道为什么它有时决定加载为英语...
更新 4: 感谢大家的回答,我已经尝试了各种建议。不幸的是,我无法授予 +100 赏金,因为似乎没有任何建议可以解决问题。如果有人最终找到适合我的解决方案,我会在那个时候再奖励他们 +50。
更新 5: 我已经从 Xcode 4.5 更新到 4.5.2,并且遇到了同样的问题。
更新 6: 我现在已经从头开始创建了一个新的测试项目,它运行得非常好!显然,我的项目布局方式或其中一个数据文件中一定有问题。我想我的下一个旅程将是从头开始重新创建项目,一个一个地复制文件数据......
更新 7(几个月后): 可悲的是,在通过煞费苦心地重新创建我的项目暂时(看似)解决了这个问题之后,我再次面临这个问题。在第一次加载时,语言被正确呈现,但在随后的加载中,它恢复为英语。
已解决 查看我的最终解决方案 below .感谢大家的帮助。我可能会分发一些赏金,因为无论如何它都会被浪费掉。
最佳答案
几个月后我终于解决了这个问题!感谢所有人的帮助(我还通过开发 channel 与 Apple 开发人员进行了一些交流)。
TL;DR:我不小心在设备之间同步语言首选项(以及许多其他意想不到的事情),使用我的应用程序的 iCloud 键值存储(通过 MKiCloudSync)!继续阅读...
我正在使用名为 MKiCloudSync 的第三方类,它有助于将 [NSUserDefaults standardUserDefaults]
同步到我的应用程序的 iCloud 键值存储。当我开始使用它时,我的意图是让它在后台处理一些用户收藏夹同步。
但是,不了解standardUserDefaults
是如何工作的,我没有意识到除了我自己的自定义之外,还有很多其他的东西被写入standardUserDefaults
应用程序设置!
所以发生的事情是这样的:
首次启动应用程序。新鲜的 standardUserDefaults
就位,并且存储语言偏好排序列表的内部“AppleLanguages”键根据当前设备选择是正确的。
应用以指定语言正确显示。
在后台,MKiCloudSync 将所有 standardUserDefaults
同步到 iCloud。相反,如果您在别处运行此应用程序,例如使用英语设置设备,该设备也会将其语言设置同步到 iCloud。所以现在这个当前正在运行的应用程序实际上已经覆盖了它的语言首选项。
BOOM ... 下次运行该应用程序时,无论您在设备上选择了什么,都会使用从 iCloud 下载的任何语言作为默认语言!
我打算如何解决下一次应用更新的问题:
使用 forked version of MKiCloudSync允许仅同步列入白名单的 key 名称。
添加将执行一次性清理的代码,首先清理我的应用程序的 iCloud keystore ,然后 ( based on this SO answer ),调用此代码重置用户默认值:
NSString *appDomain = [[NSBundle mainBundle] bundleIdentifier];[[NSUserDefaults standardUserDefaults] removePersistentDomainForName:appDomain];
到目前为止,在我的测试中,这种方法解决了这个问题......不幸的是,用户必须重新启动应用程序才能启动语言修复。但是,我的猜测是大多数用户没有遇到这个问题,因为他们不太可能使用具有不同默认语言的多种设备。
关于ios - 为什么我的 iOS 应用程序只能在首次运行时正确检测到当前语言?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13579623/
IO 设备如何知道属于它的内存中的值在memory mapped IO 中发生了变化? ? 例如,假设内存地址 0 专用于保存 VGA 设备的背景颜色。当我们更改 memory[0] 中的值时,VGA
我目前正在开发一个使用Facebook sdk登录(通过FBLoginView)的iOS应用。 一切正常,除了那些拥有较旧版本的facebook的人。 当他们按下“使用Facebook登录”按钮时,他
假设我有: this - is an - example - with some - dashesNSRange将使用`rangeOfString:@“-”拾取“-”的第一个实例,但是如果我只想要最后
Card.io SDK提供以下详细信息: 卡号,有效期,月份,年份,CVV和邮政编码。 如何从此SDK获取国家名称。 - (void)userDidProvideCreditCardInfo:(Car
iOS 应用程序如何从网络服务下载图片并在安装过程中将它们安装到用户的 iOS 设备上?可能吗? 最佳答案 您无法控制应用在用户设备上的安装,因此无法在安装过程中下载其他数据。 只需在安装后首次启动应
我曾经开发过一款企业版 iOS 产品,我们公司曾将其出售给大型企业,供他们的员工使用。 该应用程序通过 AppStore 提供,企业用户获得了公司特定的配置文件(包含应用程序配置文件)以启用他们有权使
我正在尝试将 Card.io SDK 集成到我的 iOS 应用程序中。我想为 CardIO ui 做一个简单的本地化,如更改取消按钮标题或“在此保留信用卡”提示文本。 我在 github 上找到了这个
我正在使用 CardIOView 和 CardIOViewDelegate 类,没有可以设置为 YES 的 BOOL 来扫描 collectCardholderName。我可以看到它在 CardIOP
我有一个集成了通话工具包的 voip 应用程序。每次我从我的 voip 应用程序调用时,都会在 native 电话应用程序中创建一个新的最近通话记录。我在 voip 应用程序中也有自定义联系人(电话应
iOS 应用程序如何知道应用程序打开时屏幕上是否已经有键盘?应用程序运行后,它可以接收键盘显示/隐藏通知。但是,如果应用程序在分屏模式下作为辅助应用程序打开,而主应用程序已经显示键盘,则辅助应用程序不
我在模拟器中收到以下错误: ImageIO: CGImageReadSessionGetCachedImageBlockData *** CGImageReadSessionGetCachedIm
如 Apple 文档所示,可以通过 EAAccessory Framework 与经过认证的配件(由 Apple 认证)进行通信。但是我有点困惑,因为一些帖子告诉我它也可以通过 CoreBluetoo
尽管现在的调试器已经很不错了,但有时找出应用程序中正在发生的事情的最好方法仍然是古老的 NSLog。当您连接到计算机时,这样做很容易; Xcode 会帮助弹出日志查看器面板,然后就可以了。当您不在办公
在我的 iOS 应用程序中,我定义了一些兴趣点。其中一些有一个 Kontakt.io 信标的名称,它绑定(bind)到一个特定的 PoI(我的意思是通常贴在信标标签上的名称)。现在我想在附近发现信标,
我正在为警报提示创建一个 trigger.io 插件。尝试从警报提示返回数据。这是我的代码: // Prompt + (void)show_prompt:(ForgeTask*)task{
您好,我是 Apple iOS 的新手。我阅读并搜索了很多关于推送通知的文章,但我没有发现任何关于 APNS 从 io4 到 ios 6 的新更新的信息。任何人都可以向我提供 APNS 如何在 ios
UITabBar 的高度似乎在 iOS 7 和 8/9/10/11 之间发生了变化。我发布这个问题是为了让其他人轻松找到答案。 那么:在 iPhone 和 iPad 上的 iOS 8/9/10/11
我想我可以针对不同的 iOS 版本使用不同的 Storyboard。 由于 UI 的差异,我将创建下一个 Storyboard: Main_iPhone.storyboard Main_iPad.st
我正在写一些东西,我将使用设备的 iTunes 库中的一部分音轨来覆盖 2 个视频的组合,例如: AVMutableComposition* mixComposition = [[AVMutableC
我创建了一个简单的 iOS 程序,可以顺利编译并在 iPad 模拟器上运行良好。当我告诉 XCode 4 使用我连接的 iPad 设备时,无法编译相同的程序。问题似乎是当我尝试使用附加的 iPad 时
我是一名优秀的程序员,十分优秀!