IOS 5 SDKと互換性を持つようにコードの一部を更新する際、Xcodeの「Convert to Objective-C ARC」を使用してコードをリファクタリングしようとし、エラーを受け取りました。エラーは、.hファイルのインスタンス変数で発生します。
NSError **_error;
エラーは、「明示的な所有権のない非const型 'NSError *'へのポインタ」を示しています。どうすれば修正できますか?
NSError
オブジェクトをインスタンス変数に格納するときは、単純なポインタとして宣言する必要があります。
@interface Foo : NSObject
{
NSError *_errror;
}
NSError **
は、メソッドから呼び出し元に間接的にNSError
オブジェクトを返すためにのみ使用されます。それをインスタンス変数に格納するのは(おそらく)エラーです。
ARCリリースノートへの移行 で説明されているライフタイム修飾子のいずれかを使用できます。
NSError **の場合、__ autoreleasingを使用するため、Nikolaiが提供する例は次のようになります。
@interface Foo : NSObject
{
NSError * __autoreleasing *error;
}
構文は少しおかしいので、Nikolaisのアドバイスに従う必要がありますが、NSError **が確実に機能する場合はこれを機能させる必要があります。