我最近发现iOS 9更改了预先存在的API返回的值,就当前的语言设置而言。请参阅this。
据我了解,依赖于API NSLocale.preferredLanguages()
返回的值并且正确使用iOS 8的任何应用可能会在iOS 9上失败。
除了修复和重新发布任何此类应用之外,是否有人知道是否可以采取措施避免此操作系统向后不兼容的影响?例如,用户可能在他/她的iPhone上更改的任何配置?
编辑:我的应用是针对iOS 7构建的,并依赖于上述API返回的字符串,以便选择在查询服务器的Web服务以显示内容时使用的语言。标准很简单:“它” - > “它”,“任何其他” - > “恩”。现在,API返回“it-IT”,我的应用程序将其视为“任何其他”。我的所有应用都破了;他们的用户界面以正确的语言显示,但他们显示英文内容而不是意大利语内容。
我完全清楚我可以通过修改代码并重新发布我的所有应用来解决这个问题。从长远来看,我会,而且我完全知道该怎么做(虽然重新出版的想法是一个真正的噩梦)。所以,谢谢你的建议,但老实说,我不会“接受”任何“改变你的代码”解决方案。我认为,我的问题很明确,因为它说“除了修复和重新发布”。
答案 0 :(得分:1)
如果使用较旧的SDK版本构建,则此更改不应破坏iOS 9上的现有应用程序。
为了将来修复它(使用Xcode 7 / SDK 9.X构建),您需要在代码中提供支持。您可以在NSLocale
上添加类似的类别:
@implementation NSLocale (Addition)
+ (NSString *)myPreferredLanguage {
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"9.0")) {
return [[[NSLocale preferredLanguages] firstObject] componentsSeparatedByString:@"-"][0];
} else {
return [[NSLocale preferredLanguages] firstObject];
}
}
其中:
#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)