簡體   English   中英

使用setReturnValue從NSInvocation返回NSString

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM