有没有可能[NSLocale preferredLanguages]是空的?
我得到的preferredLanguages如下:
类方法中的NSString* preLang = [[NSLocale preferredLanguages] objectAtIndex:0]。
但有时(并不总是)应用程序会在这一行崩溃。
我已经在我的应用程序中多次调用[NSLocale preferredLanguages]。一些在实例方法中,两个在类方法中。
类方法中的这两个方法都随机崩溃。
有什么问题吗?
以下是崩溃日志:
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谢谢
发布于 2015-04-02 22:42:50
问题不在于它返回的不是nil,而是一个空数组。因为NSArray为越界访问抛出了一个异常(而不是它应该为空),所以会发生崩溃。
这将返回nil,而不是崩溃。
替换
[[NSLocale preferredLanguages] objectAtIndex:0]使用
[[NSLocale preferredLanguages] firstObject]如果-preferredLanguages返回并且数组为空,那么-firstObject将返回nil,而不是抛出像-objectAtIndex:那样的异常。
https://stackoverflow.com/questions/22510525
复制相似问题