xcode 如何从 NSUserDefaults 存储检索浮点数
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/9957055/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How to store an retrieve float from NSUserDefaults
提问by Rafael Moreira
I'm having trouble storing and retrieving a float in NSUserDefauts. I store the value, but when I retrieve it, it returns 0.
我在 NSUserDefauts 中存储和检索浮点数时遇到问题。我存储该值,但是当我检索它时,它返回 0。
here's what I tried and didn't work:
这是我尝试过但没有奏效的方法:
[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
What am I doing wrong here? I've tried these 4 pieces of code but they all return zero when retrieving the float from NSUserDefaults.
我在这里做错了什么?我已经尝试了这 4 段代码,但是当从 NSUserDefaults 检索浮点数时,它们都返回零。
Any help is appreciated. Thanks!
任何帮助表示赞赏。谢谢!
采纳答案by jrturton
The first example in your code is fine, assuming that this line:
代码中的第一个示例很好,假设这一行:
NSUserDefaults *pref = [NSUserDefaults standardUserDefaults];
Appears before it. As I suggested in my comment, the behaviour you are seeing suggests that pref
is nil.
出现在它之前。正如我在评论中所建议的那样,您所看到的行为表明它pref
为零。
回答by Fernando Cervantes
Save
节省
-(void) saveFloatToUserDefaults:(float)x forKey:(NSString *)key {
NSUserDefaults * userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setFloat:x forKey:key];
[userDefaults synchronize];
}
Load
加载
-(float) loadFloatFromUserDefaultsForKey:(NSString *)key {
NSUserDefaults * userDefaults = [NSUserDefaults standardUserDefaults];
return [userDefaults floatForKey:key];
}
How-To
如何
[self saveFloatToUserDefaults:5.241 forKey:@"myFloat"];
float x = [self loadFloatFromUserDefaultsForKey:@"myFloat"];
回答by Eric
[[NSUserDefaults standardUserDefaults]setObject:[NSNumber numberWithFloat:3] forKey:@"key"];
回答by Rajesh Loganathan
Try this:
尝试这个:
- For Storing
- 用于存放
-(void)sliderAction:(id)sender
-(void)sliderAction:(id)sender
{
[[NSUserDefaults standardUserDefaults] setFloat:fontSlider.value forKey:@"keyFontSize"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
2.For retriving
2.对于检索
-(void)retrive
{
NSLog(@"%f",[storedata floatForKey:@"keyFontSize"]);
}
回答by mylogon
Well, no one seems to have explicitly resolved the issue the OP had.
The OP had declared NSUserDefaults
in the .h
file and was just trying to access it in the .m
file without actually alloc'ing the pref instance.
For the sake of the beginner programmer, this means in .h
declare the instance:NSUserDefaults * pref;
好吧,似乎没有人明确解决 OP 遇到的问题。
OP 已经NSUserDefaults
在.h
文件中声明并且只是试图在.m
文件中访问它而不实际分配 pref 实例。
为了初学者程序员,这意味着.h
声明实例:NSUserDefaults * pref;
and in your .m
method, put this before trying to access it:
并在您的.m
方法中,在尝试访问它之前放置它:
pref = [NSUserDefaults standardUserDefaults];
pref = [NSUserDefaults standardUserDefaults];
It seems obvious to some, but can catch you out every now and then. You will ideally put this somewhere like viewDidLoad
, but if you're accessing methods in that class via something like a shared instance, then in the methods you might benefit from putting
对某些人来说这似乎很明显,但时不时会发现你。您将理想把这个地方像viewDidLoad
,但如果你通过一些像访问一个共享实例在类中的方法,然后在方法你可能从把受益
if(!pref){
pref = [NSUserDefaults standardUserDefaults];
}
before you need to access it, just to make sure it's been allocated memory.
Hope this helps somebody!
在您需要访问它之前,只是为了确保它已被分配内存。
希望这对某人有帮助!
回答by zaph
NSUserDefaults
special cases floats as well as a few other native "C" types.
NSUserDefaults
特殊情况浮点数以及其他一些本机“C”类型。
[[NSUserDefaults standardUserDefaults] setFloat:3 forKey:@"key"];
float value = [[NSUserDefaults standardUserDefaults] floatForKey:@"key"];
NSLog(@"value: %.0f", value);
NSLog output:
value: 3
NSLog 输出:
值:3
回答by Praveen-K
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
}