我想要一个滑块(比如说从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可以编译,但是一旦我尝试移动滑块就会崩溃。
答案 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;