[英]float value always return as 1 after assigning in objective-c
我在UserDefaults中存储浮点值。
[[NSUserDefaults standardUserDefaults] setValue:[NSNumber numberWithFloat:self.labelSlider.lowerValue] forKey:@"KEYSLIDERLOWERVALUE"];
[[NSUserDefaults standardUserDefaults] synchronize];
但是,当我在变量“ lowerVal”中获取值时,将正确的值分配给float变量,但是当我要将浮点“ lowerVal”分配给self.lableSlider.lowerValue时,它总是给我1。
float lowerVal = [[[NSUserDefaults standardUserDefaults] valueForKey:@"KEYSLIDERLOWERVALUE"] floatValue];
if (lowerVal > [[self.arrPriceRange valueForKey:@"minPrice"] floatValue]) {
self.labelSlider.lowerValue = lowerVal;
}else{
self.labelSlider.lowerValue = [[self.arrPriceRange valueForKey:@"minPrice"] floatValue];
}
简而言之,当我在控制台中打印lowerVal时,它会给我4.55(正确值),但是当我打印self.lableSlider.lowerValue时,它会给我1。
我怎么解决这个问题?
您可以使用以下代码:
设置默认值
-(void) saveFloatValue:(float)x forKey:(NSString *)key {
NSUserDefaults * userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setFloat:x forKey:key];
[userDefaults synchronize];
}
获取默认值
-(float) retrieveFloatValueWithKey:(NSString *)key {
NSUserDefaults * userDefaults = [NSUserDefaults standardUserDefaults];
return [userDefaults floatForKey:key];
}
您正在使用NMRangeSlider吗? 我检查了源代码,发现:
- (void) setLowerValue:(float)lowerValue
{
float value = lowerValue;
if(_stepValueInternal>0)
{
value = roundf(value / _stepValueInternal) * _stepValueInternal;
}
value = MIN(value, _maximumValue);
value = MAX(value, _minimumValue);
if (!isnan(_lowerMaximumValue)) {
value = MIN(value, _lowerMaximumValue);
}
value = MIN(value, _upperValue - _minimumRange);
_lowerValue = value;
[self setNeedsLayout];
}
请注意以下几行:
value = MIN(value, _maximumValue);
value = MAX(value, _minimumValue);
_maximumValue的默认值为1.0,因此lowerValue不能超过它。 在这种情况下,应根据需要设置maximumValue和minimumValue。
您使用错误的方法访问NSUserDefaults
值。 交换
valueForKey:
与objectForKey:
setValue:forKey:
和setObject:forKey:
在您的情况下,您还可以对浮点类型使用专门的方法,这些方法可以为您装箱/拆箱:
[[NSUserDefaults standardUserDefaults] setFloat:self.labelSlider.lowerValue forKey:@"KEYSLIDERLOWERVALUE"];
float lowerVal = [[NSUserDefaults standardUserDefaults] floatForKey:@"KEYSLIDERLOWERVALUE"];
附带说明:调用synchronize
不是必需的,只是浪费资源。
您一直在使用的方法( valueForKey:
和setValue:forKey:
是KVC访问器,这些访问器在NSUserDefaults
中是不期望或没有记录的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.