iPadがデバイスの向きを変更したときに、次のコードを使用して検出/聴取しています。クラッシュの原因となる通知リスナー
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(didRotate:)
name:@"UIDeviceOrientationDidChangeNotification"
object:nil];
これは、何かが変更されたときに私のdidRotate:メソッドを呼び出します。私のdidRotate:メソッドでは、UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];
を使用して向きがわかり、それに応じてコードを適用します。
しかし実際のテストでは、didRotate:iPadが人の手の中にあれば毎秒呼び出されることに気付きました。それはリスナーが文字通り、人の手の中で明らかに(デスクの上にフラットではなく)多くのことが起こる、iPadのすべての小さな傾きとシフトを聞いているようだ。
私はこれをどのように修正することができますか?インターフェイスの向きを使用するようにコードを変更することはできますが、何らかの理由で問題が発生しています。ありがとうございました。
* UPDATE:このリスナーは、私のUIImageViewサブクラスで作成されます。画面には約十数点以上があります。インスタンスを削除するときの削除方法に[[UIDevice currentDevice] endGeneratingDeviceOrientationNotifications];
を追加しました。それは、なぜ回転があまりにも(私のエラー)表示され続けた理由を説明するのに役立ちます。
ただし、このサブクラスのインスタンスを削除してiPadを回転させるとクラッシュします。時々私は[__NSArrayM didRotate]のような奇妙なメッセージを受け取ります:認識できないセレクター(およびUIPanVelocity ... somethingのような他のwierdオブジェクト)です。インスタンスが削除された後でもリスナーはリッスンしていますか?
固定:ありがとうございます。私はついに間違っていたことに気付きました。私は、オブザーバを削除して通知を終了することなくインスタンスを削除していました。私のインスタンスの除去方法に次のコードを追加すると、私の問題が修正されています。
[[UIDevice currentDevice] endGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter] removeObserver:self];
、定数 '名を使用します。UIDeviceOrientationDidChangeNotification'ないその文字列値を'名前は:「UIDeviceOrientationDidChangeNotification」が ' – bandejapaisa