ios – OCMock方法名称冲突

我是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.但是你已经知道了一个.

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...