2014-03-19 77 views
7

[NSLocale preferredLanguages]是否有可能爲空?[NSLocale preferredLanguages]返回空嗎?

我得到像preferredLanguages:

NSString* preLang = [[NSLocale preferredLanguages] objectAtIndex:0]在一個類的方法。

但有時(並非總是)應用程序會在此行崩潰。

我多次在我的應用程序中調用[NSLocale preferredLanguages]。有些在實例方法中,TWO在類方法中。

而這兩個類的方法都隨機崩潰。

有什麼問題?

這裏是崩潰日誌:

Exception Type: EXC_BAD_ACCESS (SIGSEGV) 
Exception Subtype: KERN_INVALID_ADDRESS at 0x00000000000007d8 
Triggered by Thread: 0 

Thread 0 Crashed: 
0 libobjc.A.dylib     0x399c0911 realizeClass(objc_class*) + 21 
1 libobjc.A.dylib     0x399c09d7 realizeClass(objc_class*) + 219 
2 libobjc.A.dylib     0x399c2793 lookUpImpOrForward + 71 
3 libobjc.A.dylib     0x399bb027 _class_lookupMethodAndLoadCache3 + 31 
4 libobjc.A.dylib     0x399badf7 _objc_msgSend_uncached + 23 
5 CoreFoundation     0x2f58f607 CFArrayAppendValue + 127 
6 CoreFoundation     0x2f5dc477 CFLocaleCopyPreferredLanguages + 155 
7 CoreFoundation     0x2f5e417d +[NSLocale preferredLanguages] + 5 

感謝

+1

發佈崩潰錯誤和崩潰堆棧跟蹤。 – BergQuester

+0

如果它返回零,你不會崩潰。另一方面,如果它返回一個空數組,則會出現超出數組邊界的錯誤。 –

+0

哦〜這是空的,不是零。並附上了崩潰日誌。謝謝 – Ecroo

回答

1

的問題是不是回零,但返回一個空數組。 因爲NSArray拋出了一個超出界限的異常(而不是像它應該),你會得到一個崩潰。

這將返回零而不是崩潰。

更換

[[NSLocale preferredLanguages] objectAtIndex:0] 

隨着

[[NSLocale preferredLanguages] firstObject] 

如果-preferredLanguages回報和空數組,然後-firstObject將返回nil而不是拋出異常喜歡-objectAtIndex:的。