0

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

4

2 回答 2

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]];

当然,您需要注意幻灯片的值不要超过心情数组的范围。

于 2012-06-17T16:33:31.003 回答
0

NSString问题是您对变量的分配mood

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

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

或者

mood = [sliderArray objectAtIndex:sliderValue]; 

此外,您应该确保滑块值确实返回一个NSInteger. value滑块属性的正常类型是float. 因此:

NSInteger sliderValue = (NSInteger) slider.value; 
于 2012-06-17T16:58:36.403 回答