Domanda

Scrivo un metodo di istanza in ClassName.m:

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

E chiamalo usando

[self methodName:parameter]; 
Verrà visualizzato un avviso, ma il codice verrà comunque eseguito correttamente.

È perché non ho creato un'istanza della classe? Perché il metodo funziona ancora normalmente? E qual è il modo corretto di chiamare il metodo self per prevenire l'avvertimento?

È stato utile?

Soluzione

Bene, il primo passo per ricevere aiuto con un avviso sarebbe di pubblicare l'avviso :)

Suppongo sia qualcosa che riguarda un messaggio non riconosciuto? In tal caso è perché nonostante il compilatore veda la chiamata a " methodName " non sa se questo è valido per l'oggetto oppure no.

Immagino che il tuo codice assomigli;

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

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

Puoi anche;

a) Posiziona la funzione 'methodName' prima nel file in modo che il compilatore l'abbia vista prima che venga usata nelle chiamate.

b) dichiaralo nell'interfaccia della classe. Per es.

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

Altri suggerimenti

Qual è l'avviso che ricevi?

Hai una definizione del metodo nel tuo file di intestazione?

La sintassi che usi è il modo più efficace di chiamare il metodo su se stesso.

Il metodo funzionerà perché i metodi Objective-C vengono risolti in fase di esecuzione. Mi aspetto che l'avviso che ricevi sia simile a " Oggetto Foo potrebbe non rispondere a -methodName: " e poi ti dice che sta impostando il tipo di ritorno su id . Questo perché il compilatore non ha visto una dichiarazione o una definizione di -methodName: al momento in cui compila il codice dove lo chiami. Per rimuovere l'avviso, dichiarare il metodo nell'interfaccia della classe o in una categoria della classe.

Se ricevi un avviso potrebbe essere perché la firma del metodo non è in un'interfaccia.

@interface foo ....

-(void)method;

Una volta scritta l'implementazione, l'avviso dovrebbe sparire poiché non è la prima volta che il compilatore vede il metodo. Funzionerà senza farlo, ma il messaggio di avviso è fastidioso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top