2009-03-03 6 views
-2

Ich schreibe eine Instanzmethode in ClassName.m:Wie verwende ich die Selbstklassemethode auf dem iPhone? (Konzeptionelle Frage)

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

Und nennen Sie es mit

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

Liegt das daran, dass ich keine Instanz der Klasse erstellt habe? Warum läuft die Methode noch normal? Und was ist der richtige Weg, die self-Methode aufzurufen, um die Warnung zu verhindern?

Antwort

5

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

Ich gehe davon aus es etwas über eine nicht erkannte Nachricht ist? Wenn das so ist, weil der Compiler den Aufruf von "methodName" sieht, weiß er nicht, ob das für das Objekt gültig ist oder nicht.

Ich würde vermuten, dass Ihr Code aussieht;

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

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

Sie können entweder;

a) Platzieren Sie die Funktion 'methodName' früher in der Datei, damit der Compiler sie gesehen hat, bevor sie in Aufrufen verwendet wird.

b) deklarieren Sie es in der Klassenschnittstelle. Z.B.

1

Was ist die Warnung, die Sie erhalten?

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

Die Syntax, die Sie verwenden, ist die bessere Möglichkeit, Methoden auf self aufzurufen.

+0

Das Problem mag grundlegend sein, aber das beunruhigt mich sehr. Ich vergesse wirklich, die Methode in der Kopfdatei zu definieren. Danke in der Tat. –

1

Die Methode wird funktionieren, da Objective-C-Methoden zur Laufzeit aufgelöst werden. Ich erwarte, dass die Warnung, die Sie erhalten, etwas wie "Objekt Foo reagiert möglicherweise nicht auf -methodName:" ist, und dann sagt es Ihnen, dass es den Rückgabetyp zu id standardmäßig vorgibt. Das liegt daran, dass der Compiler keine Deklaration oder Definition von -methodName: zu dem Zeitpunkt gesehen hat, zu dem er den Code, in dem Sie ihn aufrufen, kompiliert. Um die Warnung zu entfernen, deklarieren Sie die Methode entweder in der Schnittstelle der Klasse oder in einer Kategorie der Klasse.

1

Wenn Sie eine Warnung erhalten, liegt das möglicherweise daran, dass sich die Methodensignatur nicht in einer Schnittstelle befindet.

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