首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将id转换为指向NSError指针的指针(NSError **)

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

Stack Overflow用户
提问于 2013-05-21 22:40:53
回答 1查看 1.1K关注 0票数 4

我将一个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的情况下到达这个对象?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-22 02:47:48

无论是stub:withBlock:方法还是它的任何支持基础设施,都不能简单地将双指针填充到NSArray中。数组不接受非对象,指向对象的指针也不是对象。还有别的事情在发生。

这显然需要深入研究代码才能找出答案。将值放入数组中的位置?这是在-[KWStub processInvocation:]中实现的,显然是使用OCMock,getArgumentAtIndexAsObject:添加到NSInvocation中的方法完成的。在该方法中,调用使用一个开关来检查所请求的参数的类型,并在必要时将其装箱。

这里的相关案例是最后一个案例,其中参数类型是^,意思是“指针”。这种类型的参数被包装在一个NSValue中;因此,Block接收到的数组实际上包含的不是双指针本身,而是一个表示外部指针的NSValue。你只需要打开它的包装盒。

它应该看起来像这样:

代码语言:javascript
复制
NSValue * errVal = array[1];
NSError * __autoreleasing * errPtr = (NSError * __autoreleasing *)[errVal pointerValue];
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16672795

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档