2013-03-04 12 views
14

Ho un bugreport che indica un arresto nella linea seguente, in cui cliente è un esempio di NSMutableDictionaryNSLocaleCountryCode restituisce nil

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

La mia ipotesi è che NSLocaleCountryCode restituisce nil in questa linea, che porta ad aggiungere un nil oggetto su un NSDictionary che potrebbe causare un arresto anomalo. La domanda è, qualcuno ha mai riscontrato un problema come questo prima? Ci sono dei motivi per cui lo NSLocaleCountryCode potrebbe essere nulla per lo currentLocale? La documentazione non dice nulla sulla restituzione di un valore nullo e ho pensato che questo avrebbe sempre restituito un paese valido.

Con i migliori saluti, Michael

+0

Era questo accada su un dispositivo reale o in fase di test? Se succede solo durante i test, potrebbe essere quello che @olejnjak menziona sotto. – ThomasW

+0

Questo è accaduto su più dispositivi reali in produzione. –

risposta

8

Ci sono others che hanno sperimentato questo problema, quando NSLocale è il "impostazioni internazionali del sistema". Hai bisogno di essere più difensivo nel vostro codice, per o non popolando la chiave se si tratta di nil o utilizzando [NSNull null]:

NSLocale *locale = [NSLocale currentLocale]; 
NSString *country = [locale objectForKey:NSLocaleCountryCode]; 
if (country != nil) 
{ 
    [client setObject:country forKey:@"country"]; 
} 
+0

Avete qualche informazione in quali circostanze il 'currentLocal' sarà uguale a' systemLocale'? –

+0

No, non lo so, ma è chiaro che a volte il codice del paese non è sempre popolato e quindi deve essere opzionale nel dizionario finale. – trojanfoe

+0

Abbiamo esperienza sullo stesso problema da molti dei nostri utenti. Stanno riscontrando questo problema dopo aver aggiornato la nostra app. hai mai sentito l'attuale Locale può improvvisamente cambiare comportamento come conseguenza di un aggiornamento dell'app dall'app store? – nebillo

12

Il mio caso era che per scopi di debug che avevo selezionato la lingua personalizzata in regime di corsa in Xcode. Ho avuto EN, non linguaggio di sistema.

Xcode scheme language

Problemi correlati