我在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中检索浮动时它们都返回零。
感谢任何帮助。 谢谢!
答案 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)
试试这个:
- (无效)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];
}
在您需要访问它之前,只是为了确保它已被分配内存 希望这有助于某人!