[NSLocale 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
由于
答案 0 :(得分:1)
问题不在于它返回nil而是返回一个空数组。 因为NSArray会因为越界访问而抛出异常(而不是像它应该的那样),你会崩溃。
这将返回nil而不是崩溃。
替换
[[NSLocale preferredLanguages] objectAtIndex:0]
使用
[[NSLocale preferredLanguages] firstObject]
如果-preferredLanguages
返回并且空数组,那么-firstObject
将返回nil而不是像-objectAtIndex:
那样抛出异常。