Ios 无法识别的选择器发送到if上的实例(bool)
我知道这些问题已经被贴了很多,但它们都非常具体,不适用于我的问题 [MirrorStarAV startRecording:]:发送到实例0x15561d60的选择器无法识别 调用以下方法时出现此错误:Ios 无法识别的选择器发送到if上的实例(bool),ios,objective-c,unrecognized-selector,Ios,Objective C,Unrecognized Selector,我知道这些问题已经被贴了很多,但它们都非常具体,不适用于我的问题 [MirrorStarAV startRecording:]:发送到实例0x15561d60的选择器无法识别 调用以下方法时出现此错误: - (bool) startRecording { bool result = NO; @synchronized(self) { if (!_recording) { //Exception is raised on this line
- (bool) startRecording {
bool result = NO;
@synchronized(self) {
if (!_recording) { //Exception is raised on this line
result = [self setUpWriter];
startedAt = [[NSDate date] retain];
_recording = YES;
}
}
return result;
}
我按如下方式调用该方法:
bool _startRecording(){
return [delegateMSA startRecording];
}
验证delegateMSA是否是具有startRecording方法的类的实例 或者做类似的事情
bool _startRecording(){
if([delegateMSA respondsToSelector:@selector(startRecording)]) {
return [delegateMSA startRecording];
}
}
bool _startRecording(){
if ([delegateMSA respondsToSelector:@selector(startRecording)])
{
return [delegateMSA startRecording];
}
return false;
}
在此之前检查委托是否响应此方法,以便您可以确保对象也能够响应此选择器:
bool _startRecording(){
if ([delegateMSA respondsToSelector:@selector(startRecording)])
{
return [delegateMSA startRecording];
}
return false;
}
无论哪种方式,我都建议使用@required将此选择器添加到委托方法中:
@protocol MyRecorderDelegate <NSObject>
@required
- (BOOL)startRecording;
@end
因此,如果您的委托没有实现此方法,您将收到编译器警告
[MirrorStarAV startRecording:]: unrecognized selector sent to instance 0x15561d60
上面的错误消息基本上是说MirrorStarAV不响应startRecording:所以当您调用[delegateMSA startRecording]时;它正在崩溃。delegateMSA设置了一个MirrorStarAV实例,但MirrorStarAV实例不响应“startRecording:
是的,你最好把你的方法改成
bool _startRecording(){
if([delegateMSA respondsToSelector:@selector(startRecording)]) {
return [delegateMSA startRecording];
}
}
bool _startRecording(){
if ([delegateMSA respondsToSelector:@selector(startRecording)])
{
return [delegateMSA startRecording];
}
return false;
}
但这不是你的问题。请注意,[MirrorStarAV startRecording:]的末尾有一个冒号:。您正在呼叫startRecording:在startRecording上的某个位置startRecording:当前在哪一类?您的委托指向MirrorStarAV实例。请发布完整的stacktrace。请在MirrorStarAV对象的类中正确检查.h和.m中的startRecording方法,并检查它是否具有输入参数。请注意,如果同时实现了录制属性的setter和getter,你还必须在你的课堂上合成它@synthetic recording;我不确定您是否在回答这个问题,但更好的方法是使用respondsToSelector。无论如何,类不必知道它的委托,只需要知道委托的接口。只有当您假设有时有响应该方法的委托,有时没有响应该方法的委托,并且每个委托都是正确的时,该方法才是正确的。在我看来,该方法应该一直存在,如果不存在,这是一个需要修复而不是隐藏的bug。感谢您的输入,这就是为什么我提到了将该方法设置为协议所需的方面。因此,编译器警告可以引导他找到正确的线路。多亏了这一点,我已经解决了这个问题。问题不在库本身,但似乎是xCode中的一个bug。我发现它给了我一个我已经注释掉的调试。显然,当我重建我的库时,它已不再构建,我继续使用旧的.a文件,同时更新了头文件。因此,我的库调用了一个参数不存在的方法。所以录音现在可以了,但是录制的视频全是黑色的。你们有什么快速的解决办法,我可以试试,或者我可以提出一个新问题吗?好的,这很有意义。因此,基本上,当您提供了库的新版本时,您的项目链接到的版本没有更新???作为旁注,没有人会知道,因为你没有参考图书馆,这并不重要,因为我们已经给了你足够的信息让你自己解决它。没错,比这更糟糕。我在构建库后收到的实际.a文件在构建库后根本没有得到更新。在这个库中,它仍在调用我很久以前删除的调试。。。我想这确实解释了我为什么被卡住了:好吧,只要你把它分类了,这才是最重要的。