我收到错误“float pos = [sender value];”... sender应该是我在Interface Builder中设置的UISlider。
ButtonViewController.m
- (IBAction)slide: (id)sender {
float pos = [sender value];
loadValue.progress = pos;
}
ButtonViewController.h
@interface Button_Fun4ViewController : UIViewController {
IBOutlet UIProgressView *loadValue;
}
- (IBAction)slide: (id)sender;
感谢。
答案 0 :(得分:3)
虽然发送者“应该”是一个UISlider,但编译器并不知道。它看到的只是id
,它绑定到它可以找到的第一个匹配方法签名;可能是一个返回浮点数以外的东西(作为最后的猜测,编译器会假设它返回id
)。
在这种情况下,您需要将此类型转换为UISlider:
- (IBAction)slide: (id)sender {
float pos = [(UISlider *)sender value];
loadValue.progress = pos;
}
使用NSAssert()
或if()
仔细检查这是事实UISlider
不是一个坏主意,但并非绝对必要。
答案 1 :(得分:1)
由于sender的类型为'id',编译器不知道它将从消息中返回什么,并假设它们将返回'id'类型的值。您需要将发送者强制转换为UISlider(因此编译器知道-value返回一个float),或者将消息的返回值强制转换为float。
答案 2 :(得分:1)
由于sender
的类型为id
,因此您应指明它的类型。
使用以下内容:
float pos = [(UISlider *)sender value];
或者,您可以使用协议。这样,您可以接收不同类型的对象,只要它们符合协议,就可以以相同的方式使用。
@protocol myProtocol {
-(float)value;
}
-(void)myMethod:(id<myProtocol>)sender {
float pos = [sender value];
}