そのtableViewが私のカスタムサブクラスに属するようにUITableViewControllerをセットアップしようとしています。私のloadViewメソッドは現在次のようになっています。
- (void) loadView {
MyTableViewSubclass* tv = [[[MyTableViewSubclass alloc]initWithFrame: CGRectZero style: UITableViewStylePlain]autorelease];
self.view = tv;
self.tableView = tv;
}
上記の方法をコメントアウトすると、後でクラッシュが発生します。だから何かが欠けています。しかし、何ですか?
Appleのドキュメントには、loadViewでsuperを呼び出すべきではないと書かれています。これは理にかなっています。なぜなら、ビューにクラスではなくクラスを持たせたいからです。
私が試したが役に立たないこと:
- プレーンなUITableViewを作成するように、loadViewメソッドを書き直します。これは、問題の原因が私のサブクラスの実装にあるのではないことを示しています。
- loadViewメソッドから[superviewDidLoad]を呼び出します。Appleのドキュメントから、そのメソッドがloadViewから呼び出されるのか、それ以降に呼び出されるのかはわかりません。いずれにせよ、loadViewメソッドの最後に追加しても役に立ちません。
私が試したことの1つは、問題を解決しますが、目的を達成できません。
- loadViewメソッドをコメントアウトします。
編集:クラッシュは以下に示されています。これは、ユーザーが何らかの入力を行った後に発生します。サブクラスの代わりにプレーンなUITableViewを作成している場合も、同じように発生します。アプリでは多くのことが行われており、loadViewオーバーライドの何か(または、おそらくオーバーライドから何かが欠落している)が原因で状態が異なり、クラッシュにつながります。しかし、何が違うのかを追跡する良い方法がわかりません。
2011-09-08 12:44:59.591 MyAppName[97649:207] *** Terminating app due to uncaught exception 'NSRangeException', reason: '-[MyTableViewSubclass scrollToRowAtIndexPath:atScrollPosition:animated:]: row (0) beyond bounds (0) for section (0).'