gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 04:00:09 25 4
gpt4 key购买 nike

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

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

这样我就可以通过 *errorPointer 访问底层对象。

但是,Xcode 提示 ARC 不允许将 Objective-C 指针转换为“NSError *__autoreleasing *”。有没有办法在不关闭 ARC 的情况下到达这个对象?

最佳答案

stub:withBlock: 方法或其任何支持基础结构都不能简单地将双指针填充到 NSArray 中。该数组不会接受非对象,指向对象的指针不是对象。还有其他事情正在发生。

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

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

应该是这样的:

NSValue * errVal = array[1];
NSError * __autoreleasing * errPtr = (NSError * __autoreleasing *)[errVal pointerValue];

关于objective-c - 将 id 转换为指向 NSError 指针的指针 (NSError **),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16672795/

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