如何从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中检索到浮点数时,它们都返回零。

任何帮助表示赞赏。 谢谢!

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

 NSUserDefaults *pref = [NSUserDefaults standardUserDefaults]; 

出现在它之前。 正如我在我的评论中所build议的,你所看到的行为表明pref是零。

保存

 -(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"]; 
 [[NSUserDefaults standardUserDefaults]setObject:[NSNumber numberWithFloat:3] forKey:@"key"]; 

NSUserDefaults特殊情况浮动以及一些其他本机“C”types。

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

NSLog输出:
价值:3

 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 } 

尝试这个:

  1. 用于存储

– (无效)sliderAction:(ID)发送方

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

为了回顾

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

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

在你的.m方法中,在试图访问它之前,

pref = [NSUserDefaults standardUserDefaults];

有些人似乎很明显,但偶尔可以赶上你。 你最好把它放在viewDidLoad这个地方,但是如果你通过类似于共享实例的方式访问那个类的方法,那么在你可能从中获益的方法

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

在你需要访问它之前,确保它已经被分配了内存。
希望这有助于某人!