[解決済み] error: Writeable atomic property cannot pair with synthesized setter/getter and the user defined setter/getter.
質問
最近、古い Xcode プロジェクト (以前はうまくコンパイルできた) をコンパイルしようとしたところ、この形式のエラーが大量に発生しました。
error: writable atomic property 'someProperty' cannot pair a synthesized setter/getter with a user defined setter/getter
これらのエラーを引き起こすコードパターンは、常に次のようなものです。
// Interface:
@property (retain) NSObject * someProperty;
// Implementation:
@synthesize someProperty; // to provide the getter
- (void)setSomeProperty:(NSObject *)newValue
{
//..
}
なぜエラーが発生するのかがわかります。私はコンパイラにプロパティアクセサ(ゲッターとセッターの両方)を合成するように指示し、その直後にセッターを手動でオーバーライドしています。このコードは常に少し異臭を放っています。
では、これを行うための適切な方法は何でしょうか?もし私が
@dynamic
の代わりに
@synthesize
のように、ゲッターも書かなければなりません。それしか方法はないのでしょうか?
どのように解決するのですか?
私も同じ問題を抱えており、少し調べた後、この問題についての私の結論は以下のとおりです。
コンパイラが警告するのは
@property
を省略した場合、コンパイラは警告を出します。
nonatomic
キーワードを省略することで)、そのプロパティへのアクセスを同期させる方法について不完全な実装を提供しています。
その警告を消すために
を宣言すると
@property
をアトミックと宣言した場合、以下のいずれかを行ってください。
-
使用する
@dynamic
または -
使用
@synthesize
を使用し、合成されたセッターとゲッターまたはを維持します。 - の手動実装を提供する。 両方とも の両方の手動実装を提供します (上記のディレクティブを使用しません)。
を宣言した場合
@property
と共に
(nonatomic)
を使えば、手動と合成のゲッターとセッターの実装を混在させることができます。
更新: プロパティの自動合成に関する注意点
LLVM 4.0では、CLangは宣言されたプロパティの自動合成を提供します。
@dynamic
. デフォルトでは,たとえ
@synthesize
を省略しても、コンパイラはゲッターとセッターのメソッドを提供します。しかし、アトミック・プロパティに関するルールはまだ同じです。
の両方
ゲッターとセッターの両方をコンパイラに提供させるか、あるいはそれらを
の両方
を自分で実装してください。
関連
-
[解決済み] 現在の日付から7日分を差し引いた日数
-
[解決済み] Objective-Cのクラス→文字列のようなものです。[NSArray className] -> @"NSArray" のようになります。
-
[解決済み] Objective-Cで配列に結合する
-
[解決済み] Xcodeはクラッシュの原因となる行を表示しない
-
[解決済み] IOSのUIViewからアプリケーションのドキュメントフォルダに画像を保存する
-
[解決済み] performSelectorの使用: メソッドを呼び出すだけと比較した場合
-
[解決済み] ベストプラクティス - 自分のプロジェクト/アプリのためのNSErrorドメインとコード
-
[解決済み] メソッドが存在するかどうかをチェックする
-
[解決済み] キーチェーンのアイテムは何がユニークなのか(iOSの場合)?
-
[解決済み] 別のUIViewの下にあるUIViewとのインタラクションを許可する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 現在の日付から7日分を差し引いた日数
-
[解決済み] Objective-Cのクラス→文字列のようなものです。[NSArray className] -> @"NSArray" のようになります。
-
[解決済み] Objective-Cで配列に結合する
-
[解決済み] Xcodeはクラッシュの原因となる行を表示しない
-
[解決済み] IOSのUIViewからアプリケーションのドキュメントフォルダに画像を保存する
-
[解決済み] performSelectorの使用: メソッドを呼び出すだけと比較した場合
-
[解決済み] ベストプラクティス - 自分のプロジェクト/アプリのためのNSErrorドメインとコード
-
[解決済み] メソッドが存在するかどうかをチェックする
-
[解決済み] キーチェーンのアイテムは何がユニークなのか(iOSの場合)?
-
[解決済み] 別のUIViewの下にあるUIViewとのインタラクションを許可する