Pergunta

Eu escrevo um método de instância em ClassName.m:

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

E chamá-lo usando

aviso
[self methodName:parameter]; 
A irá aparecer, mas o código ainda é executado com êxito.

É este porque eu não tiver criado uma instância da classe? Por que o método ainda funciona normalmente? E o que é a maneira correta de chamada de método de auto para impedir que o aviso?

Foi útil?

Solução

Bem, o primeiro passo para receber ajuda com uma advertência seria para deixar o aviso:)

Eu estou assumindo que é algo sobre uma mensagem não reconhecida? Se assim é porque, embora o compilador vê a chamada para "methodName" não sei se isso é válido para o objeto ou não.

Eu acho que a sua aparência código como;

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

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

Você pode;

a) Coloque a função 'methodName' no início do arquivo para que o compilador tenha visto antes de ser usado em chamadas.

b) declará-la na interface de classe. Por exemplo.

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

Outras dicas

O que é o aviso que você recebe?

Você tem uma definição do método no seu arquivo de cabeçalho?

A sintaxe que você usa é o caminho propper de chamar o método em si mesmo.

O método vai funcionar porque os métodos de Objective-C são resolvidos em tempo de execução. Espero que o aviso que você recebe é algo como "objeto Foo pode não responder a -methodName:" e depois diz-lhe que ele é inadimplente o tipo de retorno para id. Isso porque o compilador não tem visto uma declaração ou definição de -methodName: pelo tempo que compila o código onde você chamá-lo. Para remover o aviso, declarar o método em qualquer interface do classe ou uma categoria na classe.

Se você está recebendo um aviso pode ser porque a assinatura do método não está em uma interface.

@interface foo ....

-(void)method;

Uma vez que a implementação está escrito o aviso deve ir embora já que não é a primeira vez que o compilador tem visto o método. Ele vai trabalhar sem fazer isso, mas a mensagem de aviso é irritante.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top