1

私は怠惰に聞こえるかもしれませんが、私はこの主題をどのように進めるかについて少し混乱しています。私は非常によくできているこのガイドに従いました。

私の目標は、Cocos2dv1.xゲームプロジェクトをCocos2dv2.xに変換してから、プロジェクトコードをARCにリファクタリングすることです。

開始するには、空のHelloWorld Cocos2d v2.xプロジェクトを作成し、v2.x静的ライブラリを作成しました(Steffenのガイドから)。次に、コードをARCにrafactoredすると、HelloWorldはスムーズに機能しました。

問題は、ARCに文句を言わないクラスを同じプロジェクトに追加しようとしたときです(Cocos2d v2.xとv1.xの問題はそれほど多くないと仮定します-たとえば、非推奨のメソッドとクラスの使用TouchJSONのように-私のプロジェクトは少なくとも私が見ることができる限りではありません)。そこで、ゲームの残りの部分に依存しないいくつかのゲームクラスをプロジェクトに追加して(潜在的なCocos2dv2。vsv1の問題の数を減らすため)、ARCの概念実証がそれらのクラスで機能するかどうかを確認しました。コンセプト。それらを追加した後、XCodeから[編集]->[リファクタリング]オプションを選択しました。

しかし、コンパイラは次の方法で「ARCは自動解放の明示的なメッセージ送信を禁止します」のようないくつかのARC警告メッセージを表示します。

return [[[self alloc] init] autorelease];

または、すでに記述されているdeallocメソッドに関する同様の問題。

EDIT-> Refactorで追加されたコードが変更されたと思いましたが、機能するのは1回だけのようです。これに関するヒントはありますか?コードをリファクタリングする前に、すべてのコードを新しいプロジェクトテンプレートに追加する必要がありますか?

編集:それがXCodeのバグであるかどうかを確認するために、Cocos2dライブラリを含まない空のiOSプロジェクトを作成し、それをARCに変換しました。次に、NSObjectの新しい空のサブクラスを作成し、deallocメソッドを追加して、変換を再実行しました。これでうまくいきました。そのため、静的ライブラリを作成してリンクするためのいくつかの手順を正しく実行しなかった可能性があります。

これに加えて、CDXPropertyModifierActionがCocosDenshionフォルダーに自動的に含まれず、静的なものを作成した後にプロジェクトに追加する必要があったなど、他の小さな問題がいくつかあります(XCode関連ではなく、Cocos2d v2.x関連)。ライブラリ(問題に気付いたとき)。しかし、これはテンプレート作成に関連していると思います。

読んでくれてありがとう!

4

1 に答える 1

0

ええ、コメントの解決策が機能したことを確認できます。いつものように、いくつかのITのことは、さまざまなオプションを少しいじって、見込み客を変えてうまくいくかどうかを確認することでした(バグではありませんが、私は愚かで怠け者です)。

私にとってうまくいったのは、XCode メニューから EDIT->Refactor を使用し、静的ライブラリの作成後に変換した Cocos2d 2.x テンプレートによって最初のインスタンスで作成されたファイルの選択を解除することでした (例: main.m および AppDelegate .m) (不明な場合は質問してください)。これにより、新しく変換されたすべての Cocos2d 2.x クラスがスムーズに ARC 準拠クラスに変換されました。私のプロジェクトは Cocos2d 2.x と ARC の両方を完全にサポートしています :)。

動作させるために選択を解除したファイルのスクリーンショットを以下に示します。 ここに画像の説明を入力

于 2012-06-26T10:23:01.530 に答える