2013年7月5日金曜日

UIGestureRecognizerクラスで「-[クラス名 isPointTouchableInArea:]: message sent to deallocated instance アドレス」エラーが出た

UIGestureRecognizerクラスを使ってジェスチャーを作っているときに以下のエラーがでました。

-[クラス名 isPointTouchableInArea:]: message sent to deallocated instance アドレス

今回はこのエラーについて書きます。

環境

Xcode : 4.6.2
IOS SDK : 6.1
シミュレータ : iPhone (Retina 3.5-inch)、バージョン5.0

エラーの詳細

UIGestureRecognizerクラスを生成したビューから次のビューに移動し、その移動したビューをタップした際に今回のエラーが発生しました。

原因

エラーメッセージを見る限りでは、deallocメソッドがコールされたときに変数がなかったために起こったようですが、deallocメソッド内でreleaseしてもしなくても結果は変わりませんでした

今回のエラーに関しては以下に記述するのですが、デリゲート関連のエラーのようでした。

解決策

デリゲートにnilを与えてあげれば回避できます。
for (UIGestureRecognizer* gesture in self.overView.gestureRecognizers) {
    gesture.delegate = nil ; 
    gesture.enabled = NO;
}
以下の処理を記述するタイミングはビューが非表示になるところで行いました。

UIGestureRecognizerクラスのデリゲートをnilする場合は、deallocの中ではなく手動で解放を行ったほうがいいようです。

参考記事

Deallocated object getting UIGestureRecognizer message - Stack Overflow

0 件のコメント:

コメントを投稿