将id转换为指向NSError指针的指针(NSError**)

Ste*_*uda 4 pointers objective-c nserror

我有一个NSError **存储在一个数组(所以我可以得到它array[0]).我正在尝试将其转换为变量:

NSError * __autoreleasing *errorPointer = (NSError * __autoreleasing *)array[0];

所以我可以访问底层对象*errorPointer.

但是,Xcode抱怨说Cast of an Objective-C pointer to 'NSError *__autoreleasing *' is disallowed with ARC.有没有办法在不关闭ARC的情况下找到这个对象?

Jos*_*ell 8

这种stub:withBlock:方法或其任何支持基础设施都不能简单地将双指针填充到一个NSArray.该数组不会占用非对象,并且指向对象的指针不是对象.还有其他事情要发生.

这显然需要一些挖掘代码来弄清楚.值被放入数组的位置?那就是-[KWStub processInvocation:],显然是使用NSInvocationOCMock 添加的方法完成的getArgumentAtIndexAsObject:.在该方法中,调用使用开关检查所请求的参数的类型,并在必要时将其装箱.

这里的相关案例是最后一个,其中参数类型是^,意思是"指针".这种论点被包含在NSValue; 因此,你的Block收到的数组实际上包含的不是双指针本身,而是NSValue表示外部指针.你只需要拆箱即可.

这应该是这样的:

NSValue * errVal = array[1];
NSError * __autoreleasing * errPtr = (NSError * __autoreleasing *)[errVal pointerValue];
Run Code Online (Sandbox Code Playgroud)