IOS NSSlider从数组设置标签(索引:滑块值)

时间:2012-06-17 16:07:56

标签: ios arrays text label nsslider

我想要一个滑块(比如说从0到4的值)和一个相应的标签,其中的内容不会显示当前的滑块值但是相应的字符串。

我对Objective-C很新,但这是我尝试的(......并且没有用;)

首先我制作了一个数组:

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

然后我定义了操作:

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

Xcode可以编译,但是一旦我尝试移动滑块就会崩溃。

2 个答案:

答案 0 :(得分:0)

字符串是不可变的,因此您可以重用引用。使用alloc / init创建一个是多余的,因为它在创建后无法更改。同样,您可以创建不需要显式内存管理的阵列。请注意,内存管理技术会随着ARC到达iOS5而发生变化。

因此,请尝试以下操作来创建阵列。

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

然后显示情绪标签:

NSInteger index = [slider value];
NSString *mood = [sliderArray objectAtIndex:index];
[sliderLabelMood setText:mood];

您也可以考虑将标签数组设为静态,因为它是常量且固定的长度:

static NSString* moods[] = {
    @"sad", @"not so good", @"average", @"good", @"awesome"
}

在这种情况下,您可以更改以上代码:

NSInteger index = [slider value];
[sliderLabelMood setText:moods[index]];

如果当然,你需要注意幻灯片的值不超过情绪数组的范围。

答案 1 :(得分:0)

问题在于您对NSString变量mood的分配。

如果您使用格式字符串,则必须使用NSString类方法stringWithFormat:

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

mood = [sliderArray objectAtIndex:sliderValue]; 

此外,您应该确保滑块值确实返回NSInteger。滑块value属性的普通类型为float。因此:

NSInteger sliderValue = (NSInteger) slider.value;