Сбой при получении NSUserDefaults - PullRequest
1 голос
/ 09 апреля 2011

Следующий код сбой для меня

 [[NSUserDefaults standardUserDefaults] dictionaryForKey:@"2453"];

Я проверил и обнаружил, что в NSUserDefaults нет ключа с именем 2453.Я запускаю приложение в первый раз, поэтому этот ключ не будет там, но будет добавлен позже.Как игнорировать этот сбой.

Ответы [ 3 ]

2 голосов
/ 09 апреля 2011

Если эта строка

[[NSUserDefaults standardUserDefaults] dictionaryForKey:@"2453"];

является строкой, которая дает сбой, вы можете попробовать это вместо этого

NSDictionary *dict = nil;
if ([[NSUserDefaults standardUserDefaults] objectForKey:@"2453"] != nil)
    dict = [[NSUserDefaults standardUserDefaults] dictionaryForKey:@"2453"];

if (dict) {
    ...
}

Я догадываюсь, что в этом случае dictionaryForKey вызывает objectForKey негласно и вслепую пытаюсь разыграть для вас nil на NSDictionary, что, я думаю, приведет к краху.Но сначала проверив себя, есть ли какой-либо объект для этого ключа, вы можете избежать сбоя.Дай вихрь и доложи!: -)

0 голосов
/ 09 апреля 2011
if ([[NSUserDefaults standardUserDefaults] dictionaryForKey:@"2453"]) {
    // this line will only be reached if there is something for @"2453"
}
0 голосов
/ 09 апреля 2011
 [[NSUserDefaults standardUserDefaults] dictionaryForKey:@"2453"];
 //                                                      ^^    ^

«Ключ» в -dictionaryForKey: должен быть строкой NSString .Это не может быть int.Таким образом, хотя указанный вами ключ состоит только из цифр, вы все равно должны передать строку, используя @"...".Тот факт, что ключ отсутствует, не имеет отношения к аварии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...