Я пытаюсь настроить UITableViewController так, чтобы его tableView принадлежал моему пользовательскому подклассу. Мой метод loadView в настоящее время выглядит так:
- (void) loadView {
MyTableViewSubclass* tv = [[[MyTableViewSubclass alloc]initWithFrame: CGRectZero style: UITableViewStylePlain]autorelease];
self.view = tv;
self.tableView = tv;
}
Я получаю сбои позже, когда я закомментирую вышеупомянутый метод. Так что чего-то не хватает. Но что?
В документации Apple написано Я не должен вызывать super в loadView. Это имеет смысл, потому что я хочу, чтобы у представления были мои классы, а не их.
То, что я пробовал, не помогает:
- Перепишите метод loadView, чтобы он создавал простой UITableView. Это говорит мне, что источник проблемы не в реализации моего подкласса.
- Вызовите [super viewDidLoad] из моего метода loadView. Из документации Apple мне неясно, вызывается ли этот метод из loadView или после. В любом случае, добавление его в конец моего метода loadView не поможет.
Одна вещь, которую я пробовал, это решает проблему, но побеждает цель:
- Закомментируйте мой метод 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).'