Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 无法识别的选择器发送到if上的实例(bool)_Ios_Objective C_Unrecognized Selector - Fatal编程技术网

Ios 无法识别的选择器发送到if上的实例(bool)

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

我知道这些问题已经被贴了很多,但它们都非常具体,不适用于我的问题

[MirrorStarAV startRecording:]:发送到实例0x15561d60的选择器无法识别

调用以下方法时出现此错误:

- (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文件在构建库后根本没有得到更新。在这个库中,它仍在调用我很久以前删除的调试。。。我想这确实解释了我为什么被卡住了:好吧,只要你把它分类了,这才是最重要的。