gpt4 book ai didi

objective-c - 使用 setReturnValue 从 NSInvocation 返回一个 NSString

转载 作者:搜寻专家 更新时间:2023-10-30 19:57:43 24 4
gpt4 key购买 nike

当我将 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 被视为一个地址,而不是使用它的实际地址。

关于objective-c - 使用 setReturnValue 从 NSInvocation 返回一个 NSString,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22208956/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com