2011-12-29 8 views
2

で禁止されている私はこのChipmunk Tutorialで遊んでいると私は(セクション5)次のコードで問題に実行している:で暗黙の変換は、ARC

// Create our shape associated with the ball's body  
cpShape *ballShape = cpCircleShapeNew(ballBody, 20.0, cpvzero); 
ballShape->e = 0.5; // Elasticity 
ballShape->u = 0.8; // Friction 
ballShape->data = ball; // Associate with out ball's UIImageView 

最後の行ballShape-> data = ball;私はballShapeオブジェクトのデータプロパティをUIImageViewオブジェクトボールとリンクしようとしています。私はこれが正常に動作しますが、ARCで、私はこれを行うことはできません処理するARCをオフにした場合、エラーになっ:ballShapeはポインタで、元のオブジェクトは、データの性質を持っているので

"Implicit conversion of an Objective-C pointer to 'cpDataPointer' (aka 'void *') is disallowed with ARC" 

することは、どのような方法がありますボールオブジェクトをそのプロパティに割り当てて、ARCを幸せにすることができますか?私は次のコードを試しています:

ballShape->data = (__bridge cpDataPointer)ball; // Associate with out ball's UIImageView 

これは、この問題のための正しい修正ですか?私はAppleのARCのドキュメントを見てきましたが、その多くは現時点では私の頭の中にあります。申し訳ありませんが、これはかなり基本的な質問ですが、Cの " - >"演算子が私を混乱させ、怒らせます。 :)

+0

「ボール」の種類は? – oltman

+0

この質問の最初の答えは、かなり良いブリッジキャスティングについて説明しています。http://stackoverflow.com/questions/6725558/cast-of-objective-c-pointer-type-nsstring-to-c-pointer-type-cfstringref-a – oltman

+0

また、ポインタを理解していれば、C++の ' - >'演算子は素晴らしいものではありません。 'ballShape-> e'は'(* ballShape).e'と等価です。 – oltman

答えて

0

ポインタを保存したい場合は、参照番号をballに保存している限り正しいです。