繁体   English   中英

在目标C中赋值后,浮点值始终返回1

[英]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];
}

来源: https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSUserDefaults_Class/#//apple_ref/occ/instm/NSUserDefaults/setFloat:forKey:

您正在使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM