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

时间:2014-04-08 09:05:24

标签: ios objective-c unrecognized-selector

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

  

[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];
}

3 个答案:

答案 0 :(得分:0)

验证delegateMSA是否是具有startRecording方法的类的实例。

或做类似

的事情
bool _startRecording(){
   if([delegateMSA respondsToSelector:@selector(startRecording)]) {
       return [delegateMSA startRecording];
   }
}

答案 1 :(得分:0)

检查之前,委托是否响应此方法,这样您就可以确保该对象也能够响应此选择器:

bool _startRecording(){
    if ([delegateMSA respondsToSelector:@selector(startRecording)])
    {
        return [delegateMSA startRecording];
    }
    return false;
}

无论哪种方式,我建议使用@required:

将此选择器添加到委托方法中
@protocol MyRecorderDelegate <NSObject>

@required
- (BOOL)startRecording;

@end

因此,如果您的委托没有实现此方法,您将收到编译器警告。

答案 2 :(得分:0)

[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];
    }
    return false;
}

但这不是你的问题。请注意,[MirrorStarAV startRecording:]末尾有一个冒号:。您在startRecording:

之上的某个地方呼叫startRecording