レベルごとに異なるコントローラーを使用するゲームを開発しています。加速度計を介して揺れを検出する必要があるため、次のようにデリゲートとして登録されます。
UIAccelerometer *accel = [UIAccelerometer sharedAccelerometer];
accel.delegate = self;
accel.updateInterval = kUpdateInterval;
レベルが終了すると、このコントローラーは割り当て解除されて解放されます。以前は、UIAccelerometerでデリゲートを削除しなかったため、このコントローラーが解放された後にクラッシュが発生していました(つまり、解放されたオブジェクトにイベントを送信していました)。だから今、deallocの中で、私はこれをやっています:
UIAccelerometer *accel = [UIAccelerometer sharedAccelerometer];
accel.delegate = nil;
すべてが順調で良好であり、最初のレベルは問題なく再生されます。次のレベルに到達し、新しいレベルコントローラーを作成し、その最初のコードバッチを再度実行すると、問題が発生します(新しいコントローラーをデリゲートとして設定します)。この後、加速度計からの呼び出しはありません。
質問は、加速度計のアプリごとに1人の代理人しか許可されないのか、それとも何かが足りないのかということです。デリゲートを複数回設定することを許可しないドキュメントはありません。私はObj-Cに少し慣れていませんが、デリゲートを理解している限り、これはあまりにも非正統的であってはなりません。
注:3.0では、シェイク通知をリッスンできることを知っています。残念ながら、私はシェイクに興味を持っている間ずっとファーストレスポンダーになるために何か他のものが必要です。したがって、そのオプションにリファクタリングすることはできません。