Frage

Ich schreibe eine Instanzmethode in ClassName.m:

-(void)methodName:(paraType)parameter
{...}

Und nennen Sie es mit

[self methodName:parameter]; 
A Warnung Pop-up, aber der Code immer noch erfolgreich ausgeführt wird.

Ist das, weil ich nicht eine Instanz der Klasse erstellt haben? Warum noch das Verfahren läuft normal? Und was ist der richtige Weg zur Selbst Methode aufzurufen, die Warnung zu verhindern?

War es hilfreich?

Lösung

Nun ist der erste Schritt Hilfe mit einer Warnung in Empfang wäre die Warnung schreiben:)

Ich gehe davon aus es etwas über eine nicht erkannte Nachricht ist? Wenn ja es ist, denn obwohl der Compiler sieht den Aufruf von „Methodenname“ weiß er nicht, ob das für das Objekt gültig ist oder nicht.

Ich würde vermuten, Code wie folgt aussieht;

-(void) someFunc
{
  ...
  [self methodName:parameter]; 
  ...
}

-(void)methodName:(paraType)parameter
{
...
}

Sie können entweder;

a) Legen Sie die ‚Methoden‘ Funktion zuvor in der Datei so dass die Compiler es gesehen haben, bevor es in Anrufen verwendet wird.

b) erklären sie in der Klasse Schnittstelle. Z.

// Foo.h
@interface Foo {
...
}
-(void) methodName:(paraType)parameter;
@end

Andere Tipps

Was ist die Warnung, die Sie bekommen?

Haben Sie eine Definition der Methode in Ihrer Header-Datei?

Die verwendete Syntax ist die Propper Weg Methode zur Selbst aufzurufen.

Die Methode funktioniert, weil Objective-C-Methoden zur Laufzeit aufgelöst werden. Ich erwarte, dass die Warnung Sie etwas zu bekommen ist wie „Object Foo kann nicht auf -methodName antworten:“ und dann sagt Ihnen, dass es den Rückgabetyp ist standardmäßig auf id. Das ist, weil der Compiler hat eine Erklärung oder Definition von -methodName: durch die Zeit nicht gesehen den Code kompiliert, wo man es nennen. Um die Warnung zu entfernen, erklärt die Methode entweder in der Klasse Schnittstelle oder eine Kategorie auf der Klasse.

Wenn Sie eine Warnung erhalten, es könnte sein, weil die Methode Signatur nicht in einer Schnittstelle ist.

@interface foo ....

-(void)method;

Sobald die Implementierung geschrieben wird die Warnung weg gehen sollte, da es nicht das erste Mal ist der Compiler die Methode gesehen hat. Es wird ohne dies zu tun arbeiten, aber die Warnmeldung ist ärgerlich.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top