为什么IBAction的发件人类型必须是id?

时间:2016-03-23 00:57:35

标签: objective-c macos cocoa ibaction nsbutton

我正在使用" Cocoa编程为Mac OS X学习Cocoa(Objective-C版本)"每当我使用Interface Builder创建一个按钮时,我都必须将其与我目前正在使用的其中一个类连接。

当我控制从按钮到我的AppDelegate.h文件的点击拖动时,Xcode会自动将按钮挂钩到我的AppDelegate类。如果我选择"行动"它会创建一个这样的方法:

- (IBAction)onButtonPress:(id)sender {
}

Objective-C的方法是这样的:

- (returnType)methodName:(typeOfFirstArgument)firstArgumentName (typeOfSecondeArgument)secondArgumentName

为什么我必须为发件人而不是id使用NSButton类型?我知道我用一个按钮连接了这个方法。因此,我希望发件人是NSButton类型的对象。

我试过了,但它没有用。

2 个答案:

答案 0 :(得分:2)

该类型不必是id。您可以使用创建连接时的弹出窗口或代码更改参数的类型和名称。

id是一种类型,意思是“指向任何ObjC对象的指针”。指向特定类的指针也可以正常工作:

- (IBAction)onButtonPress:(NSButton *)importantButton;

答案 1 :(得分:0)

答案:它不必是一个id,如果你看一下弹出的小对话框,你选择“Action”并命名处理程序,你会看到你可以选择对象的实际类型,NSButton在你的例子中。