[英]Warning when trying to get NSString type argument from NSInvocation
[英]Returning an NSString from an NSInvocation using setReturnValue
當我將NSInvocation的返回值設置為NSString時,調用者正在接收NSCFString。
在我的情況下,我嘲笑從單元測試包含的文件中拉出一個包路徑:
[[[_bundlePartial stub] andDo:^(NSInvocation *invocation) {
NSString* resourceName = [invocation getArgumentAtIndexAsObject:2];
NSString* type = [invocation getArgumentAtIndexAsObject:3];
NSString* path = [[NSBundle bundleForClass:self.class] pathForResource:resourceName ofType:type];
if (!path)
{
path = [_bundleOriginal pathForResource:resourceName ofType:type];
}
[invocation setReturnValue:(void*)path];
}] pathForResource:OCMOCK_ANY ofType:OCMOCK_ANY];
我稱之為:
NSString* jsonPathInBundle = [[NSBundle mainBundle] pathForResource:self.fileName ofType:self.fileExtension];
不幸的是我回來了NSCFString。 這是有道理的,因為我的NSString由NSCFString支持,但是當我丟失橋時,我不能再在對象上調用NSString實例方法。 有沒有辦法可以將值作為NSString返回?
在檢查了OCMock代碼后,我發現了我的問題。 實際上是一個錯字,但它的微妙,我不認為值得刪除這個問題。
更改:
[invocation setReturnValue:(void*)path];
至:
[invocation setReturnValue:&path];
我最初的寫作方式破壞了一層抽象,因為NSString被視為一個地址,而不是使用它的實際地址。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.