我是Ocmock的新用户,所以也许我只是在这里遗漏一些简单的东西.这段代码不编译:
id mockSession = [OcmockObject mockForClass:[AVCaptureSession class]]; [[mockSession expect] addOutput:[OCMArg anyPointer]];
错误是
Multiple methods named 'addOutput:' found with mismatched result,parameter type or attributes
AVCaptureSession上的方法addOutput的签名如下
- (void)addOutput:(AVCaptureOutput *)output
据我所知,问题是方法addOutput存在于AVCaptureSession和AVAssetReader类上. AVAssetReader上addOutput的方法签名如下.
- (void)addOutput:(AVAssetReaderOutput *)output
显然,编译器认为我的mockSession是一个AVAssetReader,但我不知道为什么选择该类而不是AVCaptureSession.如果我希望AVCaptureSession上不同的方法在AVAssetReader中不存在,那么它将编译.我没有成功尝试以下.它编译,但崩溃.
id mockSession = [OcmockObject mockForClass:[AVCaptureSession class]]; [(AVCaptureSession*)[mockSession expect] addOutput:[OCMArg anyPointer]];
这个代码也没有编译,与前一个错误相同
id mockSession = [OcmockObject mockForClass:[AVCaptureSession class]]; AVCaptureVideoDataOutput *output = [[AVCaptureVideoDataOutput alloc] init]; [[mockSession expect] addOutput:output];
任何指导这里?
解决方法
在变量为“id”但是在不同类中声明不同签名的方法的情况下,您应该通过将对象转换为正确的类型来帮助编译器.
[((AVCaptureSession *)[mockSession expect]) addOutput:[OCMArg any]];
在任何一种情况下,如果参数是一个对象,如您所见,您应该使用any而不是任何Popter.但是你已经知道了一个.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。