2012-03-06 10 views
1

私は、ストーリーボードのボタンからIOSプロジェクトの新しいNSObjectクラスに接続するために何日も過ごしています。 OS Xで使用していた方法は、IOSでは動作しなくなりました。"有効な接続先"にないIOS IBActionに接続

元のUIViewControllerクラスのIBActionにボタンを接続しても問題ありません。 Appleのドキュメントによると、私の新しいクラスは「有効な接続先」ではありません。

問題を回避するために、新しいクラスのメソッドをUIViewControllerクラスから呼び出そうとしました。 Stack Overflowの投稿を使用して通知とデリゲートを試みましたが、動作させることができませんでした。

最も近い私は、そのメソッド内から、私は同じクラスで-startPlayを呼び出すことはできません、そのようしかし

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

として、ターゲットクラスの+メソッドにリンクしました。 -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]: '+ [uToneGenerator startPlay:]:認識されないセレクタークラス0x6c40に送ら' から呼び出す

アプリを終了*により、理由 'NSInvalidArgumentException' キャッチされない例外に試験方法;コンパイルしてもクラッシュする: 2012-03-06 13:22:31.413耳鳴りTamer IP [885:f803] + [uToneGenerator startPlay:]:認識できないセレクタがクラス0x6c44に送信 2012-03-06 13:22:31.414耳鳴りIP [885:F803]: '+ [uToneGenerator startPlay:]:認識されていないセレクタがクラス0x6c44に送られた' アプリを終了*により、理由 'NSInvalidArgumentException' キャッチされない例外に私は、エラーメッセージが見つけることができないことに注意

+ [uToneGenerator startPlayは:,私は呼んしようとしている方法がある - [uToneGenerator startPlay:


uToneGenerator * UTG = [[uToneGeneratorアルloc] init]; OKです。コンパイラの警告にもかかわらず、 "NSProjectは 'startPlay'に応答しない可能性があります。

私は本当に立ち往生しました。

答えて

0

あなたは、あなたのVCでIBActionメソッド内で好きなクラスメソッドを呼び出す必要があります。

​​3210
0

あなたはそのコードが動作する場合は、+- (IBAction)startPlay:(id)senderを宣言する必要があります。そうしないと、あなたのクラスのインスタンスを作成する必要があります。

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

してからstartPlayメソッドを呼び出すためにそれを使用します。

[utg startPlay:self]; 

はそれがお役に立てば幸いです。

関連する問題