我将一个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的情况下到达这个对象?
发布于 2013-05-22 02:47:48
无论是stub:withBlock:方法还是它的任何支持基础设施,都不能简单地将双指针填充到NSArray中。数组不接受非对象,指向对象的指针也不是对象。还有别的事情在发生。
这显然需要深入研究代码才能找出答案。将值放入数组中的位置?这是在-[KWStub processInvocation:]中实现的,显然是使用OCMock,getArgumentAtIndexAsObject:添加到NSInvocation中的方法完成的。在该方法中,调用使用一个开关来检查所请求的参数的类型,并在必要时将其装箱。
这里的相关案例是最后一个案例,其中参数类型是^,意思是“指针”。这种类型的参数被包装在一个NSValue中;因此,Block接收到的数组实际上包含的不是双指针本身,而是一个表示外部指针的NSValue。你只需要打开它的包装盒。
它应该看起来像这样:
NSValue * errVal = array[1];
NSError * __autoreleasing * errPtr = (NSError * __autoreleasing *)[errVal pointerValue];https://stackoverflow.com/questions/16672795
复制相似问题