2012-03-18 64 views
0

Xcode 4.2.1(ARC対応プロジェクト)で、私が問題の根本まで追跡できない奇妙な例外が発生しました。iOS - 奇妙な例外

これは、例外は次のようになります。

2012-03-18 22:19:32.855 Project[14225:707] +[UIPickerTableViewTitledCell isEqualToString:]: unrecognized selector sent to class 0x3f2bbec4 
2012-03-18 22:19:32.859 Project[14225:707] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '+[UIPickerTableViewTitledCell isEqualToString:]: unrecognized selector sent to class 0x3f2bbec4' 

UIPickerTableViewTitledCellは何ですか? UIPickerViewを使用するための内部クラスがいくつかあると思います。しかし、私は自分のプロジェクトのどこでもそのクラスを参照しているわけではありません。

私のアプリケーションは、各タブにナビゲーションコントローラを備えたタブバーアプリケーションとしてセットアップされています。この特定のタブには、tableviewとpickerviewがあります。

+0

もう一度アプリケーションを実行して、「PO」を実行してから、セレクタに応答しないインスタンスが表示されます。あなたが期待したクラスですか?そのクラスは 'isEqualToString:'を実装するか、オブジェクトのプロパティを取得して文字列をチェックする必要がありますか? – theMikeSwan

+0

'po'を実行すると' UIPickerTableViewTitledCell'が返されます... –

+0

私はそのクラスのドキュメントをどこにも見ていませんが、文字列ではないと思われますが、そのタイトルの文字列プロパティを持つ可能性があります。私は実際にピッカーのビューではまだ作業していないので、私が本当に言うことができるのは、タイトルのプロパティなどを探すことだけです。それがプライベートクラスであることを覚えておいてください。Appleは、あなたのアプリケーションを直接(例えば、それを呼び出すなどして)使用することを拒否します。 – theMikeSwan

答えて

3

超過したオブジェクトがあるようです。プリARCコードでは、リリースが1回と呼ばれる回数が多くなります。 NSStringがisEqualToStringを送信するのを探しているようなコードは聞こえますが、既にリリースされているNSStringを取得する代わりに、UIPickerTableViewTitledCellのランダムなインスタンスを取得します。

ゾンビを有効にします。 Xcode 4.2.1では、メニュー項目Product > Edit Schemeで見つけることができます。 Diagnosticsタブに移動します。次に、Enable Zombie Objectsチェックボックスがあります。これはあなたの過剰にリリースされたオブジェクトをゾンビにするので、あなたのクラッシュの原因となっているオブジェクトを正確に把握することができます。

Apple doc Technical Note TN2239: iOS Debugging Magicを読んでこれについて詳しく説明します。すべてのドキュメントは素晴らしいですが、「ゾンビ」というタイトルのセクションを読んでから始めることができます。と "もっとゾンビ!"

+0

それは本当です。私は最近、いくつかの奇妙な認識できないセレクタ例外が発生しました。オブジェクトがあまりにも頻繁にリリースされたので、他のオブジェクトの前に 'alloc'されたオブジェクトを選択しました。面白いメモリ管理があります。 –

+0

上記の出力は、「ゾンビオブジェクトを有効にする」チェックボックスをオンにしたときの結果です。 –

関連する問題