繁体   English   中英

连接到不在“有效连接目的地”的IOS IBAction

[英]Connect to an IOS IBAction which is not at a “valid connection destination”

我花了几天的时间从情节提要上的按钮连接到IOS项目中的新NSObject类。 我在OS X中使用的方法在IOS中不再起作用。

我毫不费力地将按钮连接到原始UIViewController类上的IBAction。 根据Apple文档,我的新类不是“有效的连接目标”。

要变通解决此问题,我试图从UIViewController类的新类中调用该方法。 我使用Stack Overflow上的帖子尝试了通知和委托方案,但无法使它们正常工作。

我最近一次链接到目标类中的+方法,例如

+ (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 Tinnitus Tamer IP [863:f803] + [uToneGenerator startPlay:]:无法识别的选择器发送到类0x6c40 2012-03-06 13:20:25.509 Tinnitus Tamer IP [863:f803] *由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'+ [uToneGenerator startPlay:]:无法识别的选择器发送到类0x6c40'

从testMethod调用; 编译但崩溃: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 alloc] init]; 工作正常。 尽管有编译器警告“ NSProject可能无法响应'startPlay'。

谢谢你的协助。 非常感激。 我真的被困住了。

您需要在VC的IBAction方法内调用所需的任何类方法:

- (IBAction)myButtonPressed:(id)sender {
     [MyClass myClassMethod];
}

如果你想要的代码工作必须声明- (IBAction)startPlay:(id)sender+ 否则,您将必须创建类的实例:

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

然后使用它来调用您的startPlay方法:

[utg startPlay:self];

希望能帮助到你。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM