[XCode]ARC使用中にエラー「EXC_BAD_ACCESS」「respondsToSelector」が出た場合の対処法
2013/09/06
![]()
なんでも、このエラーは解放済み(ゾンビ)のインスタンスにアクセスした時に出るエラーのようなのですが、ARCはちゃんと管理してくれるはずなのになぜ??と、結構悩まされました。
NSZombieEnabled他を設定する
まずはエラーの出どころを調べるために、環境変数にいくつか項目を足してエラーメッセージを出るようにします。(XCode4.5の場合)
エラーの出し方は簡単。Xcodeの[Product]→[Edit Scheme]を開いてやります。

ダイアログが出てくるので、[Arguments]→[Environment Variables]に
1.MallocStackLogging
2.NSDebugEnabled
3.NSZombieEnabled
の3つを入力して追加。
Valueの値をすべてYESにしてやります。図は以下。

こうしてやることで、エラーが出た際に[xxxx respondsToSelector]というエラーが出るようになります(他にもあるかもしれませんが、確認できたのはこのエラーだけ)。
そのxxxxにエラーの素が隠されているので、探してみましょう。
参考:深淵へ – ゾンビオブジェクトを検出する (Xcode編) – Kazzzの日記
delegateが原因
ARCを使っているときにこのエラーが出た場合は、大体がdelegateの開放漏れのはずです。.hからIBOutletなどでUIを繋いでいて、それを
abc.delegate = self;
のような形で定義している場合に起こりやすい印象です。UIViewControllerにUITableViewを足したりとか。
UISplitViewでReplaceを使って、もともとあるDetailViewControllerから違うコントローラーに遷移している場合にも出たりします。SplitViewの情報少ないのにこれが出てかなりキツかったです。
そんな場合は、[xxxx respondsToSelector]のxxxxのコントローラーで宣言している.mファイルに
-(void)dealloc {
abc.delegate = nil;
}
でデリゲートをnilにしてやればエラーが消えてくれるはずです。
参考
チーズくんの備忘録 [エラー][iOS][xxxxxxx respondsToSelector:]: message sent to deallocated instance xxxxxx
関連記事
-
-
プログラミングができるだけではプロジェクトは成功しない
プログラマーなのに最近は電話対応で1日が終わる僕です。いろんな所でうめき声ととも …
-
-
[XCode]iPhoneに入っていないフォント(カスタムフォント)を使えるようにする方法と注意点
iPhoneは結構いろんなフォントが使えますが、「オリジナルのフォントを使いたい …
-
-
[XCode]UINavigationBarにUIBarButtonItemでボタンを追加する方法
アプリ開発には欠かせないナビゲーションバー。 UINavigationBarにボ …
-
-
[XCode 4.3]Text Fieldの入力が終わったら次のText Fieldにソフトウェアキーボードでカーソルを移動させて最後にボタンを押す方法
XCodeをしこしこやっております。ほーく(@hawk_a)です。 プログラムの …
-
-
[XCode]追加してインポートしたヘッダーファイルが見つからないときの対処法3つ
XCodeでインポートの宣言をした際(import <hoge.h> …
-
-
デスマーチを止める!システム開発の成功に「設計」と「テスト」は欠かせない
「デスマーチ」という、IT業界で名の知れた用語があります。 商品知識のない営業が …
-
-
[XCode]StoryBoardで作ったTableViewCellでオリジナルのセルを表示する方法
TableView標準のセルではやりたいことが表現できなさそうな時には、Tabl …
-
-
[XCode]NSNotificationってなに?って人もとりあえずこれだけは知っておくべき
異なるクラス間で通知や変数を渡したりできる便利なNSNotificationです …
-
-
[git]Coda2でgitを設定してWordPressのテーマファイルをバックアップする方法
ブログのテーマを作り直していろいろしています。家ではiMac、外ではMacBoo …
-
-
開発したiOSアプリに不具合を見つけた時に緊急で審査期間を早くしてもらう方法
先日とうとう恐れていたことが起こりました。黒い怪物が部屋に出たとかそういうことで …