2012-02-29 96 views
0

如果我使用演員對象

[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. 鑄造是不是一個解決方案。 Objective-C是一種動態語言,即使強制轉換消除了編譯器警告,對象的實際實現也不會改變,所以它自然不會響應消息。

+0

但我怎麼可以在調用的方法傳遞的對象foo? – NemeSys 2012-02-29 18:11:21

+0

你想如何「拿」它?這是在爭論中。 – 2012-02-29 19:03:14