Приведение объекта в вызове с executeSelectorOnMainThread iOS - PullRequest
0 голосов
/ 29 февраля 2012

Если я использую

[self performSelectorOnMainThread:@selector(uploadDidEnd:) withObject:foo
        waitUntilDone:YES]

В методе - (void) uploadDidEnd: (id) отправитель

Какой объект является отправителем?в вызове foo есть пользовательский класс?Как я могу преобразовать этого отправителя в моем объекте?

Я пытаюсь привести, но у меня есть

'-[_NSThreadPerformInfo CountY]: unrecognized selector sent to instance 0x52bbd0'

В уведомлениях я использую приведение от отправителя к NSNotification, и уведомление имеетсвойство объекта, но для NSThread я не нашел.

Спасибо.

Ответы [ 2 ]

2 голосов
/ 29 февраля 2012

Вы можете думать о:

[self performSelectorOnMainThread:@selector(uploadDidEnd:)
      withObject:foo
      waitUntilDone:YES]

примерно так же, как:

[self uploadDidEnd:foo];

Вы уверены, что именно это и пытаетесь сделать?

Если так: внутри вашей uploadDidEnd: реализации вы можете привести foo к любому типу объекта, который на самом деле похож на этот:

- (void)uploadDidEnd:(id)sender
{
  FooClass *foo = (FooClass *)sender;
  [foo doSomething]; // or whatever
}
2 голосов
/ 29 февраля 2012
  1. Аргумент, объявленный sender, является единственным параметром, передаваемым вашему методу. executeSelectorOnMainThread: withObject: waitUntilDone: передает свой аргумент после withObject в селектор для выполнения, так что да, здесь foo будет передано uploadDidEnd:

  2. Кастинг не является решением. Objective-C - это динамический язык, поэтому даже если приведение исключает предупреждения компилятора, фактическая реализация объекта не изменится, поэтому он, естественно, не ответит на сообщения.

...