0

如果我使用

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

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

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

我正在尝试投射,但我有

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

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

谢谢。

4

2 回答 2

2
  1. 声明为 asender的参数是传递给您的方法的唯一参数。performSelectorOnMainThread:withObject:waitUntilDone: 将其参数 after 传递withObject给要执行的选择器,所以是的,这里foo将传递给 uploadDidEnd:

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

于 2012-02-29T18:08:43.727 回答
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
}
于 2012-02-29T18:30:43.853 回答