15

クライアントがのインスタンスである次の行にクラッシュを示すバグレポートがありますNSMutableDictionary

[client setObject:[[NSLocale currentLocale] objectForKey:NSLocaleCountryCode] forKey:@"country"];

私の推測では、NSLocaleCountryCodeこの行で nil が返され、 nil オブジェクトが に追加NSDictionaryされ、クラッシュが発生します。問題は、以前にこのような問題を経験した人はいますか? NSLocaleCountryCodeが nil になる理由はありcurrentLocaleますか? ドキュメントには nil 値を返すことについて何も書かれていません。これは常に有効な国を返すと思いました。

敬具、マイケル

4

2 に答える 2

10

「システムロケール」である場合、この問題を経験した人は他にもいます。キーが存在する場合はキーを入力しないか、次を使用NSLocaleして、コーディングをより防御する必要があります。nil[NSNull null]

NSLocale *locale = [NSLocale currentLocale];
NSString *country = [locale objectForKey:NSLocaleCountryCode];
if (country != nil)
{
    [client setObject:country forKey:@"country"];
}
于 2013-03-04T13:20:27.447 に答える