【问题标题】:implicit conversion of an indirect pointer to an objective-c pointer with ARC使用 ARC 将间接指针隐式转换为 Objective-c 指针
【发布时间】:2012-02-10 10:47:59
【问题描述】:

我正在处理一个使用 ARC 的项目,但我在处理已有的一段代码时遇到了问题。

代码如下:

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

    return self;
}

我收到一条错误消息:

ARC 不允许将间接指针隐式转换为指向“NSError”的 Objective-c 指针。

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

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

NSError *errorPointer;

谢谢!

【问题讨论】:

    标签: iphone objective-c ios


    【解决方案1】:

    errorPointer 和 error 的类型不匹配。

    根据您那里的代码,您的 error 参数似乎应该声明为 NSError *

    【讨论】:

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

    应该是

    errorPointer = *error; // no error here
    

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

    【讨论】:

    • @AdamW 绝对,你是对的!因为这个名字,我很困惑。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2012-02-08
    • 1970-01-01
    • 2011-10-15
    • 1970-01-01
    • 2012-01-04
    • 1970-01-01
    • 1970-01-01
    • 2012-01-12
    相关资源
    最近更新 更多