Exception Code.

iPhone、Macと読書が大好き。iPhone・Mac・書評を中心に好きな事を書いていました。今は『ほーくブログ』でブログを書いています。

[XCode]ARC使用中にエラー「EXC_BAD_ACCESS」「respondsToSelector」が出た場合の対処法

      2013/09/06

Xcode icon 375x375 75

なんでも、このエラーは解放済み(ゾンビ)のインスタンスにアクセスした時に出るエラーのようなのですが、ARCはちゃんと管理してくれるはずなのになぜ??と、結構悩まされました。

NSZombieEnabled他を設定する

まずはエラーの出どころを調べるために、環境変数にいくつか項目を足してエラーメッセージを出るようにします。(XCode4.5の場合)

エラーの出し方は簡単。Xcodeの[Product]→[Edit Scheme]を開いてやります。

Menubar

 

ダイアログが出てくるので、[Arguments]→[Environment Variables]に

1.MallocStackLogging
2.NSDebugEnabled
3.NSZombieEnabled

の3つを入力して追加。

Valueの値をすべてYESにしてやります。図は以下。

Xcode 1

 

こうしてやることで、エラーが出た際に[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

 - 開発/プログラム

  関連記事

bloggerXcode-icon-375x375-75.png
開発したiOSアプリに不具合を見つけた時に緊急で審査期間を早くしてもらう方法

先日とうとう恐れていたことが起こりました。黒い怪物が部屋に出たとかそういうことで …

信じられないほど簡単にオブジェクト指向って何?を解決してくれる本

「俺がやらなきゃ誰かやる」が合言葉の社会に生きている僕です。分からないことを分か …

[git]Coda2でgitを設定してWordPressのテーマファイルをバックアップする方法

ブログのテーマを作り直していろいろしています。家ではiMac、外ではMacBoo …

bloggerXcode-icon-375x375-75.png
[XCode]gitでcommitしたファイル(リモートリポジトリ)を巻き戻す方法

結構前からgitを実験的に導入してcommitやpushをしています。とうとう先 …

bloggerXcode-icon-375x375-75.png
[XCode]UIViewControllerからUISplitViewController 1つのビューからSplitViewに遷移させる方法

先日、アプリを初めてAppleに申請しました。@hawk_aです。 iOS開発の …

bloggerXcode-icon-375x375-75.png
[XCode 4.3]Text Fieldの入力が終わったら次のText Fieldにソフトウェアキーボードでカーソルを移動させて最後にボタンを押す方法

XCodeをしこしこやっております。ほーく(@hawk_a)です。 プログラムの …

bloggerXcode-icon-375x375-75.png
[XCode]UISplitViewControllerからUIViewController SplitViewから1つのビューに遷移させる方法

昨日に引き続き。 [XCode4.4]UIViewController→UISp …

無料でプライベートリポジトリをゲットできるgitBREAKがかなり使える

gitといえばおおよそgithub。しかしgithubは無料でパブリックリポジト …

bloggerXcode-icon-375x375-75.png
[XCode]StoryBoardで作ったTableViewCellでオリジナルのセルを表示する方法

TableView標準のセルではやりたいことが表現できなさそうな時には、Tabl …

bloggerXcode-icon-375x375-75.png
[XCode]追加してインポートしたヘッダーファイルが見つからないときの対処法3つ

XCodeでインポートの宣言をした際(import <hoge.h> …