0

私はシミュレータ上で正常に動作するアプリを持っていますが、実際のデバイスでは動作しません。実行時にiPhone Simulatorでは動作しますが、電話機では動作しません

、それは私に次のエラーを与える:

2010-12-05 19:58:32.006 Sports[4668:307] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UITableView isEqualToString:]: unrecognized selector sent to instance 0x800800' 

構造について少し:私は、タブバーコントローラ、UINavigationControllerある第1のビューを持っています。

ビューにはUITableViewがあります。関連しているかもしれないし、そうでないかもしれないことの1つは、私が@synthesize tableViewを行うならば、テーブルビューコントローラでは、テーブルはシミュレータと電話機の両方で空白のままです(ただし、クラッシュしません)。

私がそれを取り除くと、シミュレータに正しいデータがロードされ、電話でクラッシュします。

/dataSourceをInterface Builderでリンクする必要がある場所はどこですか?私はそれを "File's Owner"に "View"にリンクし、新しい "ViewController"を作成してみました。

+0

また、私は[UITableView isEqualToString:]が呼び出される場所についてもむしろ混乱しています。 – Kevin

答えて

2

delegatedataSourceの両方とも、テーブルビューをIBOutletと宣言するビューコントローラクラスであるFile's Ownerにリンクする必要があります。これは、nibファイルを所有するビューコントローラと同じである必要があります。さらに、そのビューコントローラはUITableViewDelegateUITableViewDataSourceのプロトコルを実装する必要があります。 (あなたがUITableViewControllerをサブクラス化している場合を除き、コメントでgrahamparksで指摘したように、!)

は、バックでその@synthesizeの行を追加します。最後に、これらの接続が正しいことを確認し、そして、確認してくださいあなたがのためにIBOutlet宣言しましたあなたのクラスとインターフェイスビルダーの間で適切に接続されていることを確認します。

+0

はい、デリゲートとデータソースはFile's Ownerにリンクしています。テーブルビューには、tableViewというIBOutletがあります。私はインターフェイスビルダーでそれをリンクする場所がわかりません。 File's Ownerに接続した「ビュー」というアウトレットがあります。 FirstViewControllerの下に私のtableViewがありますが、それをテーブルビューにフックしてもどちらか助けにならないようです。 – Kevin

+0

'@property(nonatomic、retain)IBOutlet UITableView * tableView;で、あなたのviewコントローラのヘッダにtableViewのコンセントを宣言する必要があります。次に、その接続がインターフェイスビルダーに表示されるはずです。それはうまくいくのでしょうか? –

+0

View ControllerがUITableViewControllerのサブクラスである場合(通常はオーバーライドしないでください)、独自の組み込みtableViewプロパティがあります。したがって、synthesize指示は省略してください。 – grahamparks

0

NSZombieEnabledをyesに設定してアプリを実行します。詳細および設定方法については、http://www.cocoadev.com/index.pl?NSZombieEnabledを参照してください。私はあなたが見つけるだろうと思うアプリは、今すぐリリースされたオブジェクトにメッセージを送信していることを伝えるシミュレータで例外をスローされます。

受信したエラーメッセージに基づいて、原因はNSStringまたはNSMutableStringオブジェクトです。それがNSStringであれば、NSStringはいくつかの異なるオブジェクトで共有できるので、余分なリリースがどこにあるのか分かりません。

恐らく、恐らくインストゥルメンツはこの点で大いに役立ちます。インストゥルメントを使用してオブジェクトが保持されている場所とリリースされている場所を正確に把握し、不適切なリリースを追跡できるようにする方法を説明するリンクがあります。 http://www.markj.net/iphone-memory-debug-nszombie/

幸運!

1

見つけました!

本当にこれに問題はなかったことが分かります。問題は、自分の電話機で実行したときのデータベースの日付フィールドが常にゼロ/ゼロであることでした。

なぜですか?作成されたNSDateオブジェクトは決して初期化されず、nilにとどまっていなかったからです。

なぜですか?

私の電話は24時間あり、amとpmを正しく解析していないためです。

教訓!

+0

これらは面白いバグです;-) –

関連する問題