2011-10-18 8 views
28

iOS 5 SDKと互換性があるように私のコードの一部を更新する際、私は "Convert to Objective- C ARC "を入力してエラーを受け取りました。このエラーは、.hファイルのインスタンス変数で発生します。自動参照カウント:明示的な所有権を持たない非const型 'NSError *'へのポインタ

NSError **_error; 

エラーは「非const型のポインタ「NSError *」への明示的な所有権なし」と表示されます。どうすればこの問題を解決できますか?

+0

この質問(http://stackoverflow.com/questions/6907726/setting-nserror-within-a-block-using-arcを参照)は、私が主題で見つけることができる最も近いものです。 – Ziminji

+1

なぜインスタンス変数で二重間接を使用していますか? NSErrorsを戻すことができるように、メソッドパラメータにのみ必要です。 –

+0

@BradLarson ok、 '(NSError **):error'を引数としてとるメソッドを呼び出すときに、' NSError'インスタンスを初期化する正しい方法(ARC内)は何ですか? – raffian

答えて

18

あなたは、単純なポインタとしてそれを宣言する必要があり、インスタンス変数にNSErrorオブジェクトを格納:

@interface Foo : NSObject 
{ 
    NSError *_errror; 
} 

NSError **

は間接的にしか呼び出し元にメソッドから NSErrorオブジェクトを返すために使用されます。インスタンス変数に格納するのはおそらくエラーです。

54

あなたは**あなたがそうニコライによって提供された例を__autoreleasing使用したいNSErrorについてTransitioning to ARC Release Notes

で説明した生涯の修飾子のいずれかを使用することができますが、この

@interface Foo : NSObject 
{ 
    NSError * __autoreleasing *error; 
} 

のようになります。構文は次のとおりです。ちょっと変わって、ニコライのアドバイスに従うべきですが、NSError **がうまくいけば、これがうまくいくはずです。

+1

これはコンパイルされません。 'NSError * __autoreleasing * _error;' –

+2

これは正解です。 @NikolaiRuhe州の回答としてこれを行うのは間違いではない。 –

+3

この回答ありがとう!私は 'NSArray * __strong * array'のように同じ構文で他の生涯修飾子も使用したことを付け加えたいと思います。 –

関連する問題