使用performSelectorOnMainThread iOS调用中的对象

时间:2012-02-29 18:03:03

标签: ios performselector

如果我使用

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

在方法 - (void)uploadDidEnd:(id)sender

哪个对象是发件人?在调用foo是一个自定义类?如何在我的对象中转换此发件人?

我正在尝试演员,但我正在

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

在通知中,我使用从发件人到NSNotification的强制转换,并且通知具有对象属性,但对于NSThread,我没有找到。

感谢。

2 个答案:

答案 0 :(得分:2)

  1. 声明sender的参数是传递给您的方法的唯一参数。 performSelectorOnMainThread:withObject:waitUntilDone:将withObject之后的参数传递给要执行的选择器,是的,这里foo将传递给uploadDidEnd:

  2. 投射不是解决方案。 Objective-C是一种动态语言,因此即使转换消除了编译器警告,对象的实际实现也不会改变,因此它自然不会响应消息。

答案 1 :(得分: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
}