Получение значения из standardUserDefaults использованием integerForKey после сохранения с setInteger: forKey всегда падает приложение.integerForKey всегда падает приложение
Если я извлекаю значение с помощью objectForKey и значение cast для int, ошибок нет, и я могу показать значение в сообщении журнала в порядке. Однако, когда я пытаюсь назначить этот int другому int или пытаюсь выполнить на нем математическую функцию, например добавление, он также отключает приложение.
Как получить int, который я сохранил в стандартеUserDefaults? Я развиваюсь против SDK 3.0, но испытываю идентичную проблему в 2.2.1. Благодарю.
префы определяется как
NSUserDefaults *prefs;
и retrievePrefs всегда вызывается перед savePrefs. Приложение также вызывает [prefs synchronize] перед выходом.
-(void)retrievePrefs {
prefs = [[NSUserDefaults standardUserDefaults] retain];
if (prefs) {
// doesn't crash app, spits out 'page: 1'
NSLog(@"page: %@", [prefs objectForKey:@"pageIndex"]);
// crashes app with no details
NSLog(@"page: %@", [prefs integerForKey:@"pageIndex"]);
}
}
-(void)savePrefs {
if (prefs) {
[prefs setInteger:1 forKey:@"pageIndex"];
}
}
Спасибо за удивительно быстрый и правильный ответ! (длинный) сделал трюк. Я пробовал использовать (int) раньше, но это не помогло, и приложение продолжало сбой. Не могли бы вы объяснить разницу между long и int по отношению к setInteger: forKey и integerForKey? Еще раз спасибо! Я немного погладил эту проблему. – sam
ОК спасибо. похоже, что оператор журнала действительно вызывал сбой, и я неправильно объяснял крах другим вещам, например, integerForKey не работал должным образом. – sam
SetInteger: использует тип NSInteger, который определяется как 32-разрядное целое число в 32-разрядных приложениях и 64-разрядное в 64-разрядных приложениях; то есть это всегда размер регистра процессора. Что касается литья, то при отливке до 32 бит в 32-битных процессах и 64-битном значении в 64-битных процессах он будет соответствовать размеру NSInteger. Это также то, что Apple рекомендует передавать NSInteger или NSUInteger в функцию типа printf. –