2014-12-03 157 views
2

我使用NSDateFormatter的實例來幫助在我的應用中顯示日期字符串,但是在模擬器中的「美國」到「英國」,設置中的示例顯示日期爲「2014年1月5日」,證明更改成功。但是當我在模擬器中打開我的應用時,日期仍然是「2014年1月5日」。 我用下面的代碼來檢查我的應用程序的語言環境:在模擬器的設置中更改區域格式,但應用中的區域設置不變

NSLocale *locale = [NSLocale currentLocale]; 
NSString *currentLocale = [locale objectForKey:NSLocaleIdentifier]; 
NSLog(@"Current locale is %@", currentLocale); 

而且記錄:當前語言環境是en_US。 似乎我的應用程序在模擬器設置中沒有得到當前的語言環境。它應該是我在模擬器設置中更改語言環境,並且我的應用程序可以反映更改。有什麼不對的嗎? 日期格式代碼是

static NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
dateFormatter.dateStyle = NSDateFormatterMediumStyle; 
dateFormatter.timeStyle = NSDateFormatterNoStyle; 
self.dateLabel.text = [dateFormatter stringFromDate:item.dateCreated]; 

我使用iPhone模擬器版本8.1時,Xcode版本6.1.1,iOS的8.1,SDK 8.1

的dateFormatter代碼被置於一個視圖控制器的viewWillAppear中的方法,區域格式更改後,並創建一個新的視圖控制器仍然呈現舊的區域設置。同樣的結果甚至殺死了應用程序我在表格視圖中註冊區域設置更改通知並刷新它。它可以反映語言環境的變化。無法理解差異。

回答

0

你必須設置你的NSDateFormatter

NSLocale *locale = [NSLocale currentLocale]; 
NSString *currentLocale = [locale objectForKey:NSLocaleIdentifier]; 
NSLog(@"Current locale is %@", currentLocale); 


static NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 

[dateFormatter setLocale:locale]; // <- Here 

dateFormatter.dateStyle = NSDateFormatterMediumStyle; 
dateFormatter.timeStyle = NSDateFormatterNoStyle; 
self.dateLabel.text = [dateFormatter stringFromDate:item.dateCreated]; 
+0

在setLocale之前,在設置中更改爲「英國」後,currentLocale仍爲「en_US」。所以[dateFormatter setLocale:locale];沒有幫助。 – AngleZhou 2014-12-03 10:09:02

+0

這是因爲模擬器正在使用您的Mac的語言環境,儘管您從模擬器設置更改了語言環境。如果您在需要線路的實際設備上進行測試。 – sleepwalkerfx 2014-12-03 10:14:28

+0

感謝您的設備建議,雖然我還沒有嘗試過設備上的應用程序。我想現在在模擬器上工作。 dateFormatter代碼放在一個視圖控制器的viewWillAppear方法中,在區域格式更改後,創建一個新的視圖控制器仍然呈現舊的區域格式。同樣的結果甚至殺死了應用程序我在表視圖中註冊了語言環境更改通知並進行刷新。它可以反映語言環境的變化。無法理解差異。任何想法? – AngleZhou 2014-12-03 12:48:28