0

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

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

我正在尝试保存一个scale应该是浮点数的叫做 a 的东西,所以我在 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正确创建吗?

先感谢您!

4

5 回答 5

3

存储使用

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

并使用检索它

   float value = [[_userPreference objectForKey:@"Scale"] floatValue];
于 2013-05-16T05:52:53.073 回答
3

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

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

保存您的数据和

[[NSUserDefaults standardUserDefaults] floatForKey:]

用于获取数据。

于 2013-05-16T05:55:06.157 回答
2

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

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

和以下检索:

CGFloat scale = [[_userPreference objectForKey@"scale"] floatValue];
于 2013-05-16T05:51:13.207 回答
0

if将您的条件更改为:

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

如果没有为键设置值,NSUserDefaults 将始终返回 0.0f。既然您说“0 也不是有效的”,您可以安全地使用这种方法

于 2013-05-16T06:42:46.247 回答
-1

尝试这个

 -(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"];
于 2013-05-16T05:52:50.953 回答