0

BPGameEngine読み取り専用プロパティを持つクラス がありますcurrCharacter_currCharacter = someCharacter;以前は、 の中で ( のように) ivar に直接代入していましたBPGameEngine。サブクラスで、このプロパティに書き込む必要があることに気付いたので、そのように匿名カテゴリで再宣言しました

@interface BPGameKitMPGameEngine()

    @property (readwrite, assign) BPCharacterInstance* currCharacter;

@end

その後、コンパイラーにエラーが発生し (奇妙なことに、2 日後には再現できなくなりました)、@synthesize ステートメントが必要であることをほのめかしていたので@synthesize currCharacter = _currCharacter;、サブクラス ( BPGameKitMPEngine) に追加しました。

iVar を直接使用しただけなので、同様の匿名カテゴリをスーパークラスに追加しませんでした。次に、super( )への呼び出しで呼び出され_currCharacter = someCharacter;たメソッド内にある行が単に何もしないことを発見しました。デバッガーに表示され、nil ではありませんでしたが、行が実行された後、残りました。奇妙なことに、サブクラスに同様の匿名カテゴリを追加すると、問題が修正されました。BPGameEngineBPGameKitMPEngine[super methodContainingAssignmentToCurCharIvar]_currCharactersomeCharacter_currCharacternil@synthesize

の一貫性のない要件は、@synthesizeXcode のバグに違いないように思えますが、これ以外のことには困惑しています。@synthesize誰かがサブクラスにあることの問題を説明できますか?

4

2 に答える 2

0

問題を 100% 理解できたかどうかわかりませんが、次の手順を実行してください。

  • BPGameKitMPGameEngineと呼ばれる新しいクラス拡張ファイルを作成しますPrivate
  • そのファイル ( #import "BPGameKitMPGameEngine_Private.h") をBPGameKitMPGameEngine.mとにインポートしますBPGameKitMPEngine.m
  • から既存のクラス拡張コードを削除しBPGameKitMPGameEngineます。

そして、期待どおりに機能するかどうかを確認します。

于 2014-01-20T21:31:34.597 に答える