Как сохранить плавание извлечения из NSUserDefaults - PullRequest
4 голосов
/ 31 марта 2012

У меня проблемы с хранением и извлечением float в NSUserDefauts.Я сохраняю значение, но когда я получаю его, оно возвращает 0.

Вот то, что я пытался и не работало:

[pref setFloat:3.0f forKey:@"key"];
float value = [pref floatForKey:@"key"]; //value=0

[pref setFloat:3 forKey:@"key"];
float value = [pref floatForKey:@"key"];//value=0

[pref setObject:[NSNumber numberWithFloat:3] forKey:@"key"];
float value = [[pref objectForKey:@"key"]floatValue];//value=0

[pref setObject:[NSNumber numberWithFloat:3.0f] forKey:@"key"];
float value = [[pref objectForKey:@"key"]floatValue];//value=0

Что я здесь не так делаю?Я пробовал эти 4 фрагмента кода, но все они возвращают ноль при извлечении float из NSUserDefaults.

Любая помощь приветствуется.Спасибо!

Ответы [ 7 ]

9 голосов
/ 31 марта 2012

Сохранить

-(void) saveFloatToUserDefaults:(float)x forKey:(NSString *)key {
    NSUserDefaults * userDefaults = [NSUserDefaults standardUserDefaults];
    [userDefaults setFloat:x forKey:key];
    [userDefaults synchronize];
}

Загрузить

-(float) loadFloatFromUserDefaultsForKey:(NSString *)key {
    NSUserDefaults * userDefaults = [NSUserDefaults standardUserDefaults];
    return [userDefaults floatForKey:key];
}

Инструкции

[self saveFloatToUserDefaults:5.241 forKey:@"myFloat"];
float x = [self loadFloatFromUserDefaultsForKey:@"myFloat"];
3 голосов
/ 31 марта 2012

Первый пример в вашем коде хорош, если предположить, что перед ним стоит строка:

NSUserDefaults *pref = [NSUserDefaults standardUserDefaults];

.Как я предположил в своем комментарии, поведение, которое вы видите, предполагает, что pref равно нулю.

1 голос
/ 31 марта 2012
[[NSUserDefaults standardUserDefaults]setObject:[NSNumber numberWithFloat:3] forKey:@"key"];
0 голосов
/ 31 июля 2015

Что ж, похоже, никто явно не решил проблему, с которой столкнулся OP.
ОП объявил NSUserDefaults в файле .h и просто пытался получить к нему доступ в файле .m без фактического выделения ресурсов.'pref instance.
Ради начинающего программиста это означает, что в .h объявляется экземпляр:
NSUserDefaults * pref;

, а в вашем методе .m, поместите это передпытаясь получить к нему доступ:

pref = [NSUserDefaults standardUserDefaults];

Некоторым это кажется очевидным, но время от времени может вас поймать.В идеале вы должны поместить это где-то как viewDidLoad, но если вы обращаетесь к методам в этом классе через что-то вроде общего экземпляра, то в методах, которые вы могли бы извлечь выгоду, поместив

if(!pref){ 
pref = [NSUserDefaults standardUserDefaults];
}

, прежде чем вам нужнополучить доступ к нему, просто чтобы убедиться, что ему выделена память.
Надеюсь, это кому-нибудь поможет!

0 голосов
/ 10 декабря 2013

Попробуйте:

  1. Для сохранения

- (недействительно) sliderAction: (id) отправитель

{
   [[NSUserDefaults standardUserDefaults] setFloat:fontSlider.value forKey:@"keyFontSize"];
    [[NSUserDefaults standardUserDefaults] synchronize];
}

2.Для получения

-(void)retrive
{
   NSLog(@"%f",[storedata floatForKey:@"keyFontSize"]);
}
0 голосов
/ 31 марта 2012
NSUserDefaults *pref = [NSUserDefaults standardUserDefaults];
if (pref) {
   [[NSUserDefaults standardUserDefaults] setFloat:3 forKey:@"key"];

   //for accessing
   float value = [pref floatForKey:@"key"]; //if key does not exist, value will be zero
}
0 голосов
/ 31 марта 2012

NSUserDefaults особые случаи с плавающей точкой, а также несколько других нативных типов "C".

[[NSUserDefaults standardUserDefaults] setFloat:3 forKey:@"key"];

float value = [[NSUserDefaults standardUserDefaults] floatForKey:@"key"];
NSLog(@"value: %.0f", value);

NSLog выход:
значение: 3

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