2009-08-14 50 views
1

我看到很多Objective-C/Cocoa SDK API,您可以在其中指定一個目標和一個將被回調的動作。在類之間調用@selector方法

我想要做同樣在我的兩個班的,但是當我存儲在選擇的通過,稍後嘗試調用它,我得到的異常,

「無法識別的選擇發送到 實例」

我轉嫁給ClassB的目標和行動是這樣的:

[myClassB doSomething:self action:@selector(anAction:)]; 

ClassB的聲明,併爲實施這一方法的:

@interface ClassB 
{ 
    id target; 
    SEL targetAction; 
} 

@implementation ClassB 

-(void)theWork { 
if ([target respondsToSelector:targetAction]) 
{ 
    [target targetAction]; 
} 
} 

在生成過程中,我也得到了以下警告:

沒有「-targetAction」的方法發現

我如何可以調用進行供給目標的行動?

我想達到什麼是與此類似:

UIBarButtonItem *cancelButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel 
      target:self 
      action:@selector(cancelItem:)]; 

回答

4
[target targetAction]; 

意味着運行名爲targetAction的方法。

你想

[target performSelector:targetAction]; 
0

你需要選擇的名字保存在您的伊娃:

ClassB *b = [[ClassB alloc] init]; 
SomeOtherClass *a = [[SomeOtherClass alloc] init]; 

// next two lines require properties to be declared 
b.target = a; 
b.targetAction = @selector(doTask:); 

現在ClassB的你可以在調用方法與

[target performSelector:targetAction withObject:someObject]; 

那倒調用

- (void)doTask:(id)object 

SomeOtherClass類將someObject傳遞給它。

相關問題