使用 MyAppDelegate 时无法识别的选择器
Posted
技术标签:
【中文标题】使用 MyAppDelegate 时无法识别的选择器【英文标题】:Unrecognized selector when using MyAppDelegate 【发布时间】:2014-07-26 17:00:25 【问题描述】:我已按照指示(我相信)Use your app delegate to share info between objects
但我不断收到以下错误:
[AppDelegate setBackgroundAudio:]:无法识别的选择器发送到 实例 0x10d822400 * 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:'-[AppDelegate setBackgroundAudio:]: 无法识别的选择器发送到实例 0x10d822400'
MyAppDelegate.h
@interface MyAppDelegate : NSObject
AVAudioPlayer *backgroundAudio;
@property (strong, nonatomic) AVAudioPlayer *backgroundAudio;
@end
MyAppDelegate.m
@implementation MyAppDelegate
@synthesize backgroundAudio;
@end
ViewController.m
MyAppDelegate *app_delegate = (MyAppDelegate*) [UIApplication sharedApplication].delegate;
backgroundAudioPath = [[NSBundle mainBundle] pathForResource:@"music" ofType:@"mp3"];
backgroundAudioURL = [NSURL fileURLWithPath:backgroundAudioPath];
app_delegate.backgroundAudio = [[AVAudioPlayer alloc] initWithContentsOfURL:backgroundAudioURL error:Nil];
[app_delegate.backgroundAudio setDelegate:self];
[app_delegate.backgroundAudio setNumberOfLoops:-1];
[app_delegate.backgroundAudio prepareToPlay];
if (app_delegate.backgroundAudio != nil)
[app_delegate.backgroundAudio stop];
[app_delegate.backgroundAudio setCurrentTime:0];
[app_delegate.backgroundAudio play];
【问题讨论】:
【参考方案1】:您已将MyAppDelegate
设为NSObject
的子类,因此它绝不是您的应用委托(除了它的名称)。
当您获得真正的应用程序委托并将其转换为 MyAppDelegate
时,您现在已经获得了一个对象,您告诉编译器实现了 backgroundAudio,但事实并非如此。快速的补救措施是将MyAppDelegate
重新声明为UIResponder
的子类,实现<UIApplicationDelegate>
协议。
一定要告诉你的应用主,像这样:
// main.m
// all the usual stuff from your main.m
return UIApplicationMain(argc, argv, nil, NSStringFromClass([MyAppDelegate class]));
【讨论】:
以上是关于使用 MyAppDelegate 时无法识别的选择器的主要内容,如果未能解决你的问题,请参考以下文章
NSInvalidArgumentException,使用 performSegueWithIdentifier 时发送到实例的无法识别的选择器
使用 UIPanGesture 时发送到实例的无法识别的选择器