6

使用 UISegmentedControl,我收到了标题中关于此代码最后一行的建议的错误。

- (IBAction)segmentAction:(id)sender
{
    //NSLog(@"segmentAction: selected segment = %d", [sender selectedSegmentIndex]);
    NSArray *speeds = @[@1.25, @1.5, @2.0];
    speed = [speeds objectAtIndex:[sender selectedSegmentIndex]];
}

的声明speedNSInteger speed;.

你能帮忙解决提出的问题吗?

4

2 回答 2

16

您正在将 a 分配NSNumber *给 a NSInteger

请记住,NSArrays 存储对象,这@1.25[NSNumber numberWithFloat:1.25]

将其更改为

speed = [[speeds objectAtIndex:[sender selectedSegmentIndex]] integerValue];

或者使用更好的语法

speed = speeds[sender.selectedSegmentIndex].integerValue;

另外我认为你想要的是speed成为一个float,而不是一个NSInteger。例如,您不能将 1.25 分配给NSInteger.

于 2013-06-22T15:12:07.460 回答
3

这里的问题是objectAtIndex:返回 an id,它不能分配给 an int,因为@32会返回 an NSNumber,它是一个 Objective-c 类型。用这个

[[speeds objectAtIndex:[sender selectedSegmentIndex]] integerValue]

或者floatValue,取决于您的需要。

于 2013-06-22T15:13:36.117 回答