2012-02-29 2 views
0

Если я используюCast объект в вызове с performSelectorOnMainThread прошивкой

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

В методе - (Недействительными) uploadDidEnd: (ID) отправитель

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

Я пытаюсь бросить, но я с

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

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

Спасибо.

ответ

2

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

[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
  1. Аргумент, объявленный sender, является единственным параметром, переданным вашему методу. performSelectorOnMainThread: withObject: waitUntilDone: передает свой аргумент после withObject к селектору быть выполнены, так что да, здесь foo будет передана uploadDidEnd:

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

+0

Но как я могу принять переданный объект Foo в называемом методе? – NemeSys

+0

Как вы хотите «взять» его? Это прямо в аргументе. –

 Смежные вопросы

  • Нет связанных вопросов^_^