问题 使用ARC隐式转换指向objective-c指针的间接指针


我正在开发一个使用ARC的项目,我遇到了现有的代码问题。

继承人代码:

- (id)initWithError:(NSError **)error
{
    if ((self = [super init]))
    {
        errorPointer =  error; //Getting error here
    }

    return self;
}

我得到一个错误说:

ARC不允许隐式转换指向'NSError'的objective-c指针的间接指针。

我该怎么做才能解决这个问题?我尝试过做过桥接演员,但没有奏效。 任何帮助表示赞赏。

哦,只是为了澄清,在.h文件中这是我声明变量errorPointer的方式:

NSError * errorPointer;

谢谢!


7573
2018-01-14 17:35


起源



答案:


它应该是

errorPointer = *error; // no error here

这两个变量的间接程度不同(简单地说,它们的声明中的星数不同)。你需要添加一个 * 在......面前 error 抵消额外的 * 的 errorPointer


10
2018-01-14 17:40



不应该 errorPointer = *error;? - UIAdam
@AdamW当然,你是对的!我因为命名而感到困惑。谢谢! - dasblinkenlight
非常感谢你!那解决了问题! - Rafael Moreira


答案:


它应该是

errorPointer = *error; // no error here

这两个变量的间接程度不同(简单地说,它们的声明中的星数不同)。你需要添加一个 * 在......面前 error 抵消额外的 * 的 errorPointer


10
2018-01-14 17:40



不应该 errorPointer = *error;? - UIAdam
@AdamW当然,你是对的!我因为命名而感到困惑。谢谢! - dasblinkenlight
非常感谢你!那解决了问题! - Rafael Moreira


errorPointer和错误类型不匹配。

根据你在那里的代码,它似乎是你的 error 参数应该被声明为 NSError *


1
2018-01-14 17:37



只是稍微扩展,使用双间接参数的唯一原因(NSError **)如果您需要在该init方法中分配错误并使其可供调用者使用。 - UIAdam
是的,这是Cocoa方法中的常见模式。许多Cocoa框架方法通过传递引用返回错误(如果有的话) NSError * 方法的论证。 - Andrew Madsen
@AndrewMadsen当然......但是在这种情况下,他并不明白他想要这样做,因此我建议只改变参数的类型。 - UIAdam