Objet lancé dans un appel avec performselectoronmainthead iOS
-
14-11-2019 - |
Question
si j'utilise
[self performSelectorOnMainThread:@selector(uploadDidEnd:) withObject:foo
waitUntilDone:YES]
dans la méthode - (VOID) UPLOADDIDENDEND: (ID) Sender
Quel objet est l'expéditeur?Dans l'appel FOO est une classe personnalisée?Comment puis-je convertir cet expéditeur dans mon objet?
J'essaie de lancer mais j'ai
'-[_NSThreadPerformInfo CountY]: unrecognized selector sent to instance 0x52bbd0'
Dans les notifications, j'utilise une distribution d'expéditeur à NSnotification et la notification a la propriété objet, mais pour NsTrhead, je n'ai pas trouvé.
merci.
La solution
You can think of:
[self performSelectorOnMainThread:@selector(uploadDidEnd:)
withObject:foo
waitUntilDone:YES]
as sort of the same as:
[self uploadDidEnd:foo];
Are you sure that's what you're trying to do?
If so: inside your uploadDidEnd:
implementation, you can cast foo to whatever object type it really is like so:
- (void)uploadDidEnd:(id)sender
{
FooClass *foo = (FooClass *)sender;
[foo doSomething]; // or whatever
}
Autres conseils
The argument declared a
sender
is the only parameter passed to your method. performSelectorOnMainThread:withObject:waitUntilDone: passes its argument afterwithObject
to the selector to be performed, so yes, herefoo
will be passed to uploadDidEnd:Casting is not a solution. Objective-C is a dynamic language, so even if casting eliminates compiler warnings, the actual implementation of the object wouldn't change, so it naturally would not repond to messages.