如何从NSUserDefaults存储检索浮动

时间:2012-03-31 15:10:19

标签: iphone objective-c ios xcode nsuserdefaults

我在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段代码,但是当从NSUserDefaults中检索浮动时它们都返回零。

感谢任何帮助。 谢谢!

7 个答案:

答案 0 :(得分:9)

保存

-(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"];

答案 1 :(得分:3)

代码中的第一个示例很好,假设这一行:

NSUserDefaults *pref = [NSUserDefaults standardUserDefaults];

出现在它之前。正如我在评论中所建议的那样,您所看到的行为表明pref为零。

答案 2 :(得分:1)

[[NSUserDefaults standardUserDefaults]setObject:[NSNumber numberWithFloat:3] forKey:@"key"];

答案 3 :(得分:0)

NSUserDefaults特殊案例浮动以及其他一些本地“C”类型。

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

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

NSLog输出:
价值:3

答案 4 :(得分:0)

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
}

答案 5 :(得分:0)

试试这个:

  1. 用于存储
  2. - (无效)sliderAction:(ID)发送方

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

    2.对于重审

    -(void)retrive
    {
       NSLog(@"%f",[storedata floatForKey:@"keyFontSize"]);
    }
    

答案 6 :(得分:0)

嗯,似乎没有人明确解决OP的问题 OP已在NSUserDefaults文件中声明.h,并且只是试图在.m文件中访问它而不实际分配pref实例。
为了初学者程序员,这意味着在.h中声明实例:
NSUserDefaults * pref;

并在您的.m方法中,在尝试访问它之前将其放入:

pref = [NSUserDefaults standardUserDefaults];

对某些人来说这似乎是显而易见的,但偶尔可以把你赶出去。理想情况下,你可以将它放在像viewDidLoad这样的地方,但是如果你通过类似共享实例的方式访问该类中的方法,那么在方法中你可能会受益于放置

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

在您需要访问它之前,只是为了确保它已被分配内存 希望这有助于某人!