私はここで少し迷っています。誰かが間違ったところを指摘してくれることを願っています。didReceiveMemoryWarningの後のiOS UITableViewの空白
私のアプリケーションは、iPads向けのマスター/ビューアプリケーションです。
私のMasterViewはUITableViewを継承し、didReceiveMemoryWarningがない限り正常に動作します。私はカスタムセルの内容を持っている、そしてそれはすべての扱いを扱う。これまでのところとても良いし、ビルドには数時間しかかかりませんでした。
しかし、いったんdidReceiveMemoryWarningを取得すると、self.tableViewは不思議な振る舞いをするようです。 numberOfSectionsInTableViewとのtableView:numberOfRowsInSection:メソッドは再び呼び出されることはありませんし、私のコードは次のように(メモリの警告の後)最初の項目を選択しようとしたとき:
[self.tableView selectRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]
animated:NO
scrollPosition:UITableViewScrollPositionMiddle];
それは
でクラッシュ - [ UITableView scrollToRowAtIndexPath:atScrollPosition:animated:]:セクション(0)の境界(0)を超える行(0)。 '
だから何ですか?私のtableViewのメモリがメモリ警告中に完全に消去された場合、なぜそれはnilに設定されませんでしたか?また、私はどのようにそれをもう一度構築するのですか?
こんにちはマルクス、書き込みに感謝。私はお詫びします、私はコンテキストを与えていない:OSX 10.6.8、Xcode 4.2、プロジェクトは、ARCを使用していますターゲットは、iOS 5.0.0を実行しているiPad 2です。 –
問題は、テーブルの内容が浮かび上がっていることが判明しました。配列の内容とともに、テーブルに何を入れるべきかを知ることができます。 'docs'という名前の配列は 'nil'されているので、[docs count]は '0'ではなく 'nil'を返していたので、selectRowAtIndexPathに到達すると、 '0'行ではありません。 –
「nil」オブジェクトがクラッシュすることなくメッセージを受け取れるようにすることは、ObjectiveCの基本的な誤りです。戻りオブジェクトの型をintからnilに変更するからです。 [docs count]行でクラッシュが発生した場合は、別の方法ではなく、どこに問題があるのか正確に知っていたはずです。 –