【发布时间】:2012-03-08 10:05:48
【问题描述】:
我花了好几天的时间来将故事板上的按钮连接到 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 耳鸣驯服器 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 Tinnitus Tamer IP[885:f803] * 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“+[uToneGenerator startPlay:]:无法识别的选择器发送到类 0x6c44'
我注意到错误信息找不到+[uToneGenerator startPlay:,但我试图调用的方法是-[uToneGenerator startPlay:
uToneGenerator *utg = [[uToneGenerator alloc]init];工作正常。尽管有编译器警告“NSProject 可能无法响应‘startPlay’。
感谢您帮助我。非常感激。我真的被卡住了。
【问题讨论】:
标签: ios