2012-01-14 10 views
10

私はARCを使用するプロジェクトで作業しています。すでに持っている既存のコードに問題があります。ARCを使った間接的なポインタから目的関数のポインタへの暗黙的な変換

相続コード: 'NSError' にObjective-Cのポインタへの間接ポインタの

暗黙的な変換はARCで禁止されています

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

    return self; 
} 

Imはというエラーを取得。

この問題を解決するにはどうすればよいですか?私はブリッジキャストを試みたが、うまくいきませんでした。 何か助けていただければ幸いです。

ああ、ちょうど明確化のために、.hファイルでは、これは私が変数errorPointer宣言方法です:

NSError * errorPointerを。

ありがとうございます!

答えて

9

これは、2つの変数が間接のレベル(簡単に言えば、それらの宣言の星の数が同じではない)だけ異なる

errorPointer = *error; // no error here 

であるべきです。 errorPointerの余分な*をオフセットするには、errorの前に*を追加する必要があります。

+2

'errorPointer = * error;'ではありませんか? – UIAdam

+0

@AdamWもちろん、あなたは正しいです!私は名前のために混乱してしまった。ありがとう! – dasblinkenlight

+0

ありがとうございます!それが問題を解決しました! –

1

errorPointerとエラーの型が一致しません。

あなたのコードに基づいて、あなたのerror引数はNSError *と宣言する必要があるようです。

+0

ちょっと拡張するだけで、二重間接引数( 'NSError **')を使用する唯一の理由は、そのinitメソッド内でエラーを割り当てて呼び出し元が利用できるようにする必要がある場合です。 – UIAdam

+0

はい、それはココアの方法の共通パターンです。多くのCocoaフレームワークメソッドは、渡された参照渡しのメソッドに対するNSError *引数を介してエラーを返します。 –

+0

@AndrewMadsen確かに...しかし、この場合、彼はそれをやりたがっていることは明らかではないので、引数の型を変更することを提案します。 – UIAdam

関連する問題