在下面的代码中,是否需要将发件人投递给UISlider?无论如何,我无法真正看到发件人是UISlider对象的原因?将发件人强制转换为发件人对象类型?
-(IBAction)sliderChangeGoat:(id)sender {
UISlider *slider = sender; // OR UISlider *slider = (UISlider*)sender;
NSString *newText = [[NSString alloc] initWithFormat:@"%d", (int)[slider value]];
[sliderLabel_003 setText:newText];
if((int)[slider value] > 0) [goatLabel setText:@"Goats:"];
} else [goatLabel setText:@"None:"];
[newText release];
}
EDIT_001:
那是我在想什么(@chuck),你是什么意思?我不确定这是不是更改名称发件人的错误形式?
-(IBAction)sliderChangeGoat:(UISlider*)slider {
}
千恩万谢
加里
讽刺的是,当消息传递'id'时,你不会*获得*编译器警告,只有运行时错误。如果你输入的是静态的,那么编译器会提醒你,因为它能更好地理解你的意图。 – 2010-01-21 22:10:25
这是奎因的一个好点。感谢澄清。 – 2010-01-21 22:12:41
如果某个方法存在多个冲突的定义(例如'setSomething:(NSNumber *)num'和'setSomething:(NSInteger)num'),那么当您使用'id'时,您可能会收到警告,但不会显式静态类型。但是一般来说,编译器会更多的使用静态类型变量来抱怨 - 这就是完成这一点的关键。 – Chuck 2010-01-21 22:14:08