2015-12-14 15 views
0

我想從iOS 9中的mainBundle加載本地化的HTML文件。本地化文件都命名爲「help.html」,並位於「 de.lproj「和」en.lproj「目錄。加載本地化的pathForRes在iOS模擬器上工作,但在設備上失敗

如果我在模擬器(iOS 9.2)上運行此代碼段,它將返回正確的indexPath,但是當我在設備(iOS 9.2)上運行它時,它返回nil。

NSArray* availableLocalizations = [[NSBundle mainBundle] localizations]; 
NSArray* userPreferred = [NSBundle preferredLocalizationsFromArray:availableLocalizations forPreferences:[NSLocale preferredLanguages]]; 
NSString *indexPath = [[NSBundle mainBundle] pathForResource:@"help" ofType:@"html" inDirectory:nil forLocalization:[userPreferred objectAtIndex:0]]; 

我已經檢查並確認該文件是在部署到設備應用程序捆綁現有,而文件名(包括上/ lowercasing)是正確的。

回答

0

NSBundle preferredLocalizationsFromArray的行爲似乎從iOS 8.4更改爲9.0。

例如:我選擇了「奧地利」作爲地區,「德國」作爲語言。

  • iOS 8.4只返回一個preferredLocalization「de」。
  • iOS 9.0返回兩個「de_AT」和「de」。

對於「de_AT」,NSBundle pathForResource找不到「de」本地化,並返回nil。

與該(最好不要)解決方法修正:

NSArray* availableLocalizations = [[NSBundle mainBundle] localizations]; 
NSArray* userPreferred = [NSBundle preferredLocalizationsFromArray:availableLocalizations forPreferences:[NSLocale preferredLanguages]]; 

NSString *indexPath; 
for (NSString *locale in userPreferred) { 
    indexPath = [[NSBundle mainBundle] pathForResource:@"hilfe" ofType:@"html" inDirectory:nil forLocalization:locale]; 
    if (indexPath) break; 
} 
相關問題