web-dev-qa-db-ja.com

自動参照カウント:明示的な所有権がない非const型 'NSError *'へのポインター

IOS 5 SDKと互換性を持つようにコードの一部を更新する際、Xcodeの「Convert to Objective-C ARC」を使用してコードをリファクタリングしようとし、エラーを受け取りました。エラーは、.hファイルのインスタンス変数で発生します。

NSError **_error;

エラーは、「明示的な所有権のない非const型 'NSError *'へのポインタ」を示しています。どうすれば修正できますか?

30
Ziminji

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

@interface Foo : NSObject
{
    NSError *_errror;
}

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

18
Nikolai Ruhe

ARCリリースノートへの移行 で説明されているライフタイム修飾子のいずれかを使用できます。

NSError **の場合、__ autoreleasingを使用するため、Nikolaiが提供する例は次のようになります。

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

構文は少しおかしいので、Nikolaisのアドバイスに従う必要がありますが、NSError **が確実に機能する場合はこれを機能させる必要があります。

57
tapi