2

単純な float 値を 1 に設定しようとすると、本当に奇妙な問題が発生します。

私の所有物:

{
float direction;
}
@property(nonatomic)float direction;

合成されるもの:

@synthesize direction;

次に、次のコードを使用しました。

- (void)setDirection:(float)_direction {
    NSLog(@"Setter called with value of %f",_direction);
    self->direction = _direction;
}

テスト目的で...

これで値を変更しようとすると、

[[w getCharacter] setDirection:1.0f];

どこで[w getCharacter]これを与えます:

return [[[self scene] gameLayer] player];

setDirection「定義されていません」という警告が表示されます。

ドット表記 ( ) に切り替えると[w getCharacter].direction、「以前のエラーで混乱し、救済」されます。

ここから奇妙さが始まります。値を変更しようとすると、デバッグ メッセージが表示されます_direction = 0.00000。後で数字を確認すると、まだ0.000です。私は明らかにそれを 1 に変更しようとしていますが、なぜこれが機能しないのですか?

4

2 に答える 2

1

[注:コメントでは、作者はこの回答を無視すると言っています。

self.direction = 1; のシンタックスシュガーです

[self setDirection: 1];

電話するとき

   -(void)setDirection:(float)_newDirection {
       self.direction = _newDirection;
}

コンパイラまたはプリプロセッサに再帰ループを設定するように指示しているようです。プリプロセッサ(私は思う)はそれをこれに変更します:

-(void)setDirection:(float)_newDirection {
       [self setDirection: _newDirection];
 }

簡単に言えば

    -(void)setDirection:(float)_newDirection {
      direction = _newDirection;
}

割り当ては機能するはずです(今はうまくいきました)

于 2010-01-25T22:39:57.420 に答える
1

最も簡単な説明は、[w getCharacter]あなたが考えているオブジェクトのクラスを返さないということです。方向が定義されているクラスのみがメッセージに応答できます。定義されたクラスで明示的に呼び出して、これをテストする必要があります。

メソッドを定義するヘッダーが含まれていない可能性があります。

おそらく無関係な 2 つの問題:

構築はself->directionスカラー値に対して機能しますが、クラスの概念全体に行き詰まります。この場合、'direction=_direction;` を使用するだけで、直接設定されます。

Apple は、アンダースコアで始まるすべての名前を独自の内部使用のために予約しています。Objective-c にはグローバルな名前空間があるため、これらを使用しないでください。フレームワークの奥深くで定義されている Apple 変数を誤って使用する可能性があります。(これが、フレームワーク定数がすべて NS、CF、CA などで始まる理由です。)

于 2010-01-26T02:30:05.270 に答える