25

昨夜 iOS6 用の Xcode 4.5 の最新バージョンに更新した後、次のような警告とエラーが表示されます

プロパティ 'mapAnnotation' には、メソッド 'mapAnnotation' を定義する必要があります - @synthesize、@dynamic を使用するか、このクラスの実装でメソッドの実装を提供してください

@synthesize ステートメントが欠落しているため、使用すると不明な iVar に関するエラーさえ発生します。

問題は、Mountain Lion で公開された最後の Xcode 4.5 への更新以降、これらの @synthesize ステートメントを記述する必要はないと考えていたことです。そして、昨夜 Xcode を更新する前に、すべてのプロジェクトはそれらなしで機能していました (削除しました)。当時の私のファイルからの @synthesize ステートメントの全体の束) それはまだリリースノートにあります:

• プロパティを使用すると、Objective-C の @synthesize コマンドがデフォルトで生成されます。

@synthesize の自動生成をオンにする新しい Project-Setting がないのでしょうか。

しかし、新しいプロジェクトを作成して試しても機能しません

4

1 に答える 1

36

私は同じ問題に直面し、その理由と解決策を見つけました。

iOS 6 SDK の NSManagedObject のヘッダー ファイルを見ると、プロパティに @dynamic または @synthesize を指定するようにクラスに強制する "NS_REQUIRES_PROPERTY_DEFINITIONS" が表示されます。

(iOS 5.1 と iOS 6.0 の API 差分で NS_REQUIRES_PROPERTY_DEFINITIONS を確認できます。)

これは、特に NSManagedObject クラスのサブクラスの実装において、プロパティを動的にするか合成するかをコンパイラが認識しなければならないためです。

NSManagedObject サブクラスの @dynamic 以外のプロパティに対して明示的に @synthesize 行を追加するだけで、この問題を解決できました。

于 2012-09-22T14:33:51.773 に答える