我正在构建一个应用程序,我希望使用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
吗?
提前谢谢!
答案 0 :(得分:3)
使用
存储 [_userPreference setObject:[NSNumber numberWithFloat:100.0] forKey:@"Scale"];
[_userPreference synchronize];
并使用
检索它 float value = [[_userPreference objectForKey:@"Scale"] floatValue];
答案 1 :(得分:3)
如果要使用NSUserDefaults,请不要创建任何变量或@propertys。只需使用
[[NSUserDefaults standardUserDefaults] setFloat:forKey:]
[[NSUserDefaults standardUserDefaults] synchronize];
保存您的数据
[[NSUserDefaults standardUserDefaults] floatForKey:]
用于获取数据。
答案 2 :(得分:2)
您是否尝试过设置浮点值:
[_userPreference setObject:[NSNumber numberWithFloat:100.0f] forKey@"scale"];
以及以下内容进行检索:
CGFloat scale = [[_userPreference objectForKey@"scale"] floatValue];
答案 3 :(得分:0)
将if
条件更改为:
if ([_userPreference floatForKey:@"scale"] == 0.0f ) {
如果没有为密钥设置值,NSUserDefaults将始终返回0.0f。既然你说“0也不是有效的”,你可以安全地使用这种方法
答案 4 :(得分:-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"];