连接到不在“a”位置的IOS iAction;“有效连接目的地”;

连接到不在“a”位置的IOS iAction;“有效连接目的地”;,ios,Ios,我花了好几天时间从故事板上的按钮连接到IOS项目中的新NSObject类。我在OSX中使用的方法在IOS中不再有效 将按钮连接到原始UIViewController类上的iAction没有问题。根据Apple文档,我的新类不是“有效的连接目标” 为了解决这个问题,我尝试从UIViewController类调用新类中的方法。我尝试了通知和委托方案,使用堆栈溢出上的帖子,但无法让它们工作 我最接近的链接是目标类中的+方法,例如 + (void) startToneGenerator { NS

我花了好几天时间从故事板上的按钮连接到IOS项目中的新NSObject类。我在OSX中使用的方法在IOS中不再有效

将按钮连接到原始UIViewController类上的iAction没有问题。根据Apple文档,我的新类不是“有效的连接目标”

为了解决这个问题,我尝试从UIViewController类调用新类中的方法。我尝试了通知和委托方案,使用堆栈溢出上的帖子,但无法让它们工作

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

+ (void) startToneGenerator
{
    NSLog(@"Arrived in startToneGenerator");  
//        [self startPlay:nil];
}
但是,从该方法内部,我不能在同一个类中调用-startPlay。因为-StartPlay类是音频单元构造的一部分,我不能在不破坏音频单元的情况下将其更改为+starPlay类

有人能给我指一些文档吗?这些文档描述了“有效连接目的地”的真正含义,以及如何使尝试的连接成为有效连接


我在OSX中使用了答案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           
}
//VC中的代码
-(iAction)RunPauseStop:(id)发送方
{                
NSLog(@“到达RunPauseSTop”);//确定
[uToneGenerator testMethod];//确定
//[uToneGenerator startPlay:self];//崩溃
}
//自动生成器中的代码
+(void)测试方法
{
NSLog(@“到达”);//确定
//[uToneGenerator startPlay:nil];//崩溃
}
-(iAction)开始播放:(id)发送方
{
NSLog(@“到达”);//不要到这里
}
线路[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”

从testMethod调用;编译但在以下情况下崩溃: 2012-03-06 13:22:31.413耳鸣治疗仪IP[885:f803]+[uToneGenerator startPlay:]:发送到0x6c44类的未识别选择器 2012-03-06 13:22:31.414耳鸣治疗仪IP[885:f803]*由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“+[uToneGenerator startPlay:]:未识别的选择器发送到类0x6c44”

我注意到错误消息找不到+[uToneGenerator startPlay:,但我尝试调用的方法是-[uToneGenerator startPlay:


uToneGenerator*utg=[[uToneGenerator alloc]init];工作正常。尽管编译器发出警告,“NSProject可能不会响应“startPlay”


谢谢你的帮助。非常感谢。我真的被卡住了。

你需要在VC的iAction方法中调用你想要的任何类方法:

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

如果您希望该代码正常工作,则必须使用
+
声明
-(iAction)startPlay:(id)sender
。否则,您必须创建类的实例:

uToneGenerator *utg = [[uToneGenerator alloc]init]; //or whatever you use
然后用它调用您的
startPlay
方法:

[utg startPlay:self];
希望能有帮助