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