如何从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 }
尝试这个:
- 用于存储
– (无效)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]; }
在你需要访问它之前,确保它已经被分配了内存。
希望这有助于某人!