【问题标题】:sending NSNumber *_ strong to parameter of incompatible type of float将 NSNumber *_ strong 发送到不兼容的浮点类型的参数
【发布时间】:2013-08-21 03:58:49
【问题描述】:

尝试保存 Slider 的位置:

使用 NSUserDefaults 保存我的滑块值:

 NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setObject:[NSNumber numberWithFloat:slider.value] forKey:@"slider"];

在我的 ViewdidLoad 方法中:

 NSNumber *sliderValue =   [defaults objectForKey:@"Slider"];
[slider setValue:sliderValue];

在我的 setValue 方法下,我收到错误:将 NSNumber *_ strong 发送到不兼容的浮点类型的参数。任何帮助将不胜感激。

【问题讨论】:

  • 我建议你阅读UISlider的文档...

标签: iphone ios objective-c nsuserdefaults viewdidload


【解决方案1】:

行:

[slider setValue:sliderValue];

需要:

[slider setValue:[sliderValue floatValue]];

slider 的 value 属性是 float 类型。您不能简单地传递 NSNumber 引用。

顺便说一句 - NSUserDefaults 直接支持 float 值:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setFloat:slider.value forKey:@"slider"];

slider.value = [defaults floatForKey:@"slider"];

【讨论】:

    【解决方案2】:

    在 viewDidLoad 中,

    而不是:

    NSNumber *sliderValue =   [defaults objectForKey:@"Slider"];
    

    写:

    float sliderValue = [[defaults objectForKey:@"Slider"] floatValue];
    

    setValue 将float 作为参数,而您提供NSNumber,因此会引发错误。

    【讨论】:

      猜你喜欢
      • 2015-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多