2012-03-06 39 views
1

我一直花費數天的時間從故事板上的按鈕連接到IOS項目中的新NSObject類。我在OS X中使用的方法不再適用於IOS。連接到不在「有效連接目標」的IOS IBAction

我沒有問題連接到原始UIViewController類的IBAction的按鈕。根據Apple文檔,我的新課程不是「有效的連接目的地」。

要解決此問題,我嘗試從UIViewController類的新類中調用該方法。我嘗試通知和委託計劃,使用堆棧溢出的帖子,但無法讓他們工作。

我來連接到目標A +級方法最接近,如

+ (void) startToneGenerator 
{ 
    NSLog(@"Arrived in startToneGenerator"); 
//  [self startPlay:nil]; 
} 

然而,從方法內我不能把在同一類的-startPlay。由於-StartPlay類是音頻單元結構的一部分,我無法將其更改爲+ starPlay類而不會破壞音頻單元。

任何人都可以向我指出一些描述「有效連接目的地」真正意義的文檔,以及如何使嘗試的連接成爲有效的連接。


我以前在OS X,在它的工作中回答1建議的方法,但它不再是IOS工作。 我重申了您澄清問題的代碼。

// code in VC 

- (IBAction)RunPauseStop:(id)sender 
    {     
    NSLog(@"arrived in RunPauseSTop"); // OK 

    [uToneGenerator testMethod]; // OK     
    // [uToneGenerator startPlay:self]; // crashes 
} 


// code in uToneGenerator 

+ (void) testMethod 
{ 
NSLog(@"arrived in <testMethod>"); // OK 
// [uToneGenerator startPlay:nil]; // crashes 
} 


- (IBAction)startPlay:(id)sender 
{ 
NSLog(@"arrived in <startPlay>"); // Don't get here   
} 

該行[uToneGenerator startPlay:nil];編譯(帶有警告)而崩潰,並:

2012-03-06 13:20:25.509耳鳴馴IP [863:F803] + [uToneGenerator startPlay:]:無法識別的選擇發送到類0x6c40 2012-03- 06 13:20:25.509耳鳴馴IP [863:F803] *終止應用程序由於未捕獲的異常 'NSInvalidArgumentException',原因: '+ [uToneGenerator startPlay:]:無法識別的選擇發送到類0x6c40'

從主叫測試方法;編譯但崩潰: 2012-03-06 13:22:31.413 Tinnitus Tamer IP [885:f803] + [uToneGenerator startPlay:]:無法識別的選擇器發送到類0x6c44 2012-03-06 13:22:31.414 Tinnitus Tamer IP [885:F803] *終止應用程序由於未捕獲的異常 'NSInvalidArgumentException',原因是: '+ [uToneGenerator startPlay:]:無法識別的選擇發送到類0x6c44'

我注意的是,該錯誤信息無法找到+ [uToneGenerator startPlay :,但我想調用的方法是 - [uToneGenerator startPlay:


uToneGenerator * UTG = [[uToneGenerator人LOC] INIT];行得通。儘管編譯器警告「NSProject可能不會響應'startPlay'。

感謝您的幫助。非常感謝。我真的被卡住了。

回答

0

你需要調用任何你想要的類方法的IBAction爲法中在你的VC:

​​3210
0

如果你想要的代碼工作,你必須用+聲明- (IBAction)startPlay:(id)sender。否則,你就必須讓你的類的實例:

uToneGenerator *utg = [[uToneGenerator alloc]init]; //or whatever you use 

,然後用它來打電話給你startPlay方法:

[utg startPlay:self]; 

希望它能幫助。