[NSLocale preferredLanguages]是否返回空?

时间:2014-03-19 15:24:29

标签: ios iphone

[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

由于

1 个答案:

答案 0 :(得分:1)

问题不在于它返回nil而是返回一个空数组。 因为NSArray会因为越界访问而抛出异常(而不是像它应该的那样),你会崩溃。

这将返回nil而不是崩溃。

替换

[[NSLocale preferredLanguages] objectAtIndex:0]

使用

[[NSLocale preferredLanguages] firstObject]

如果-preferredLanguages返回并且空数组,那么-firstObject将返回nil而不是像-objectAtIndex:那样抛出异常。