Search code examples
iosarraystextlabelnsslider

IOS NSSlider set label from array (at index: slider value)


I'd like to have a slider (lets say values from 0 to 4) and an according label which content does NOT display the current slider value BUT an according string.

I'm quite new to Objective-C but here is what I tried (...and did not work ;) )

first I made an Array:

sliderArray = [[NSArray alloc] initWithObjects:
@"sad" @"not so good" @"average" @"good" @"awesome", nil];

then I defined the action:

(IBAction)sliderChange:(id)sender {
   UISlider *slider = (UISlider *) sender;
   NSString *mood = [[NSString alloc] init];
   mood = @"%@", [sliderArray objectAtIndex:(int)[slider value]];
   [sliderLabelMood setText:mood];
}

Xcode can compile but as soon as I try to move the slider it crashes.


Solution

  • The problem is your assignment to the NSString variable mood.

    If you use a format string you will have to use the NSString class method stringWithFormat: thus either

    mood = [NSString stringWithFormat:@"%@", 
       [sliderArray objectAtIndex:sliderValue]]; 
    

    or

    mood = [sliderArray objectAtIndex:sliderValue]; 
    

    Also, you should make sure that the slider value really returns an NSInteger. The normal type for a slider's value property is float. Thus:

    NSInteger sliderValue = (NSInteger) slider.value;