Ich lerne Cocoa mit "Cocoa Programmieren für Mac OS X gerade (die Objective-C Edition)" und wann immer ich eine Schaltfläche mit Interface Builder erstelle, muss ich es mit einer der Klassen verbinden, mit denen ich gerade arbeite .Warum muss der Sendertyp einer IBAction ID sein?
Wenn ich Click-Drag von der Schaltfläche zu meiner AppDelegate.h-Datei steuern, wird Xcode automatisch die Schaltfläche an meine AppDelegate-Klasse haken. Wenn ich „Aktion“ wählen, wird es eine Methode wie folgt erstellen:
- (IBAction)onButtonPress:(id)sender {
}
Objective-C Methoden wie diese Arbeit:
- (returnType)methodName:(typeOfFirstArgument)firstArgumentName (typeOfSecondeArgument)secondArgumentName
Warum muss ich den Typ id
für den Sender anstelle von NSButton
? Ich weiß, dass ich die Methode mit einem Knopf verbunden habe. Als Konsequenz erwarte ich, dass der Absender ein Objekt vom Typ NSButton
ist.
Ich habe das versucht, aber es hat nicht funktioniert.
Ein wichtiges Detail hier für Menschen neu in der Sprache ist, dass 'id' ein Generikum ist ** ** Zeiger, so dass, wenn Sie es ersetzen Sie verwenden müssen etwas wie 'NSButton *' und ** nicht ** 'NSButton'. –
Uh! Das wusste ich nicht. Könnten Sie ein Beispiel nennen, warum Sie die ID über den eindeutigen Typ verwenden würden, den Sie erwarten? – user148013
Sie würden "id" nur verwenden, wenn Sie erwarten, dass verschiedene Objekte diese Methode aufrufen und sich selbst anmelden müssen, @ user148013. Oder wenn Sie den Absender überhaupt nicht interessiert hätten. –