Como usar o método de classe auto no iPhone? (Questão conceptual)
-
03-07-2019 - |
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?
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.