Search code examples
iphoneiosobjective-cnsuserdefaultsviewdidload

sending NSNumber *_ strong to parameter of incompatible type of float


Trying to save the position of a Slider:

saving my slider value with NSUserDefaults:

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

in my ViewdidLoad method:

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

under my setValue method I receive the error: sending NSNumber *_ strong to parameter of incompatible type of float. Any help would be much appreciated.


Solution

  • The line:

    [slider setValue:sliderValue];
    

    needs to be:

    [slider setValue:[sliderValue floatValue]];
    

    The value property of slider is of type float. You can't simply pass an NSNumber reference.

    BTW - NSUserDefaults has direct support for float values:

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