繁体   English   中英

NSUserDefaults无法正确保存浮动

[英]`NSUserDefaults` not saving float properly

我正在构建一个应用程序,我想使用NSUserDefaults在其中保存一些用户数据,它是我的一个控制器的属性,如下所示:

  @property (nonatomic, strong) NSUserDefaults *userPreference;
  @synthesize userPreference = _userPreference;

而且我正在尝试保存一个称为scale东西,它应该是一个浮点数,因此我在getter中执行了类似的操作,以放置一些scale默认值,以防用户没有输入一个默认值:

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

  if (![_userPreference floatForKey:@"scale"]) { 
      // if user has not entered this info yet
      // also 0 is not a valid value so I can do this
      [_userPreference setFloat:100.0 forKey:@"scale"]; // let default scale be 100.0
      [_userPreference synchronize];
  }

但是,以后查询时,无论我在默认值中设置了什么,都将使用以下命令:

  [self.userPreference floatForKey:@"scale"];

总是return 1 我不确定发生了什么。 我没有正确创建NSUserDefaults吗?

先感谢您!

储存使用

   [_userPreference setObject:[NSNumber numberWithFloat:100.0] forKey:@"Scale"];
   [_userPreference synchronize];

并使用

   float value = [[_userPreference objectForKey:@"Scale"] floatValue];

如果要使用NSUserDefaults,请不要创建任何变量或@propertys。 只需使用

[[NSUserDefaults standardUserDefaults] setFloat:forKey:]
[[NSUserDefaults standardUserDefaults] synchronize];

保存您的数据并

[[NSUserDefaults standardUserDefaults] floatForKey:]

用于获取数据。

您是否尝试过设置浮点值:

[_userPreference setObject:[NSNumber numberWithFloat:100.0f] forKey@"scale"];

和以下内容进行检索:

CGFloat scale = [[_userPreference objectForKey@"scale"] floatValue];

将您的if条件更改为此:

if ([_userPreference floatForKey:@"scale"] == 0.0f ) {

如果未为密钥设置任何值,NSUserDefaults将始终返回0.0f。 由于您说的是“ 0也无效”,因此可以安全地使用此方法

尝试这个

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

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

 [self saveFloatToUserDefaults:6.55 forKey:@"myFloat"];
 float x = [self retriveFromUserDefaultsForKey:@"myFloat"];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM