Lançar objecto em uma chamada com performSelectorOnMainThread iOS
-
14-11-2019 - |
Pergunta
Se eu usar
[self performSelectorOnMainThread:@selector(uploadDidEnd:) withObject:foo
waitUntilDone:YES]
No método -(void)uploadDidEnd:(id)do remetente
Que objeto é o remetente?na chamada foo é uma classe personalizada?Como posso converter esse remetente meu objeto?
Eu estou tentando elenco, mas eu estou tendo
'-[_NSThreadPerformInfo CountY]: unrecognized selector sent to instance 0x52bbd0'
Em notificações, eu uso um elenco de remetente para NSNotification e notificação tem a propriedade de objeto, mas para NSThread que eu não encontrei.
Obrigado.
Solução
Você pode pensar:
[self performSelectorOnMainThread:@selector(uploadDidEnd:)
withObject:foo
waitUntilDone:YES]
como uma espécie do mesmo como:
[self uploadDidEnd:foo];
Tem certeza que é o que você está tentando fazer?
Se assim:dentro da sua uploadDidEnd:
a implementação, você pode lançar foo para qualquer tipo de objeto que realmente é assim:
- (void)uploadDidEnd:(id)sender
{
FooClass *foo = (FooClass *)sender;
[foo doSomething]; // or whatever
}
Outras dicas
O argumento declarado
sender
é o único parâmetro passado para o método.performSelectorOnMainThread:withObject:waitUntilDone:passa seu argumento depoiswithObject
para o seletor para ser executada, então, sim, aquifoo
será passado para uploadDidEnd:Elenco não é uma solução.Objective-C é uma linguagem dinâmica, portanto, mesmo se a carcaça elimina os avisos do compilador, a implementação real do objeto não muda, por isso, naturalmente, não repond para mensagens.