1

Objective C と Cocoa を学ぼうとしていますが、オブジェクト内のプロパティにアクセスできません。具体的には、C メソッドのオブジェクトです。シマリスのダイナミクス ライブラリを使用しています。

Chipmunk には、cpVect と呼ばれる NSPoint に似た機能があります。オブジェクト内で cpVect を定義するのに問題はありませんが、@property と @synthesize を使用してアクセサーを作成しようとすると、エラーが発生し続けます。

@interface ControlsLayer : Layer {
    Sprite * touchMarker, *dragMarker;
    cpVect * forceVector;
}

正常に動作します

しかし

@interface ControlsLayer : Layer {
    Sprite * touchMarker, *dragMarker;
    cpVect * forceVector;
}

@property (retain) cpVect forceVector;

@end

エラーが表示されます"property 'forceVector' with 'retain' must be of object type"

したがって、「保持」がないと、別のエラーが発生します

"type of property 'forceVector' does not match type of ivar 'forceVector'"

私はこれを理解しようとしてぐるぐる回っています、私が使用できる特定のタイプはありますか、それはシマリスとココアの間の非互換性ですか、それとも...または....わかりません。Chipmunk はドキュメントが非常に少なく、私が見つけたすべての例はオブジェクトを使用していないようです。すべての例は、すべてを処理するために 1 つのクラスを使用しているだけです。

どんな助けでも大歓迎です。このことは私を夢中にさせています。

4

2 に答える 2

4

あなたが得ているエラーは、retain(つまり、セッターが新しい値の参照カウントをインクリメントし、古い値の参照カウントをデクリメントする参照カウントメモリ管理) のセマンティクスが目的の C オブジェクトに対してのみ意味があるためです。プロパティのデフォルトのセマンティクスは ですが、次のようretainにプロパティを指定できます。assign

@property (assign) cpVect *forceVector;

ここで、プロパティは実際には aであり、あなたが書いた acpVect*ではないと想定しています。cpVect

于 2009-03-30T20:56:53.087 に答える
2

インスタンス変数には cpVect へのポインターがありますが、プロパティにはありません。

これを試して:

@property (assign) cpVect * forceVector;

于 2009-03-30T20:57:42.040 に答える