Я сталкиваюсь с проблемой, когда вызывается tableView:numberOfRowsInSection:
, затем вызываются другие методы, которые влияют на базовый массив, затем вызывается tableView:cellForRowAtIndexPath:
и происходит сбой, потому что содержимое базового массива отличается от того, когда numberOfRowsInSection
был назван.Если фреймворк вызовет numberOfRowsInSection
прямо перед вызовом cellForRowAtIndexPath
, проблем не будет.
Поскольку я не могу ожидать исправления в фреймворке в краткосрочной перспективе, самое простое решение, которое я 'm смотрит на возвращает пустую ячейку, если базовый массив не содержит запрошенную запись.
Подробнее о том, как возникает эта проблема:
- Приложение использует контроллер панели вкладок.
- Корневым контроллером для каждой вкладки является
UINavigationController
. - Указанный контроллер представления вызывается путем помещения его в стек навигации второго контроллера панели панели вкладок.
- Метод viewWillAppear рассматриваемого контроллера представления сбрасывает базовый массив и затем вызывает
[_tableView reloadData]
. - Делегат приложения, который реализует UITabBarControllerDelegate, реализует метод
tabBarController:didSelectViewController:
и вызывает popToRootViewControllerAnimated:
на контроллере представления - Метод viewWillAppear корневого контроллера представления вызывает метод в рассматриваемом контроллере представления, который влияет на содержаниеts базового массива.
Действия по воспроизведению проблемы:
- Запуск приложения.
- Коснитесь элемента второй вкладки.
- Нажмите, чтобы вызвать рассматриваемый контроллер представления.Выполните работу в этом представлении, чтобы заполнить таблицу.
- Коснитесь первого элемента вкладки.
- Коснитесь второго элемента.
На пятом шаге приведен порядокзвонки:
- viewControllerInQuestion: viewWillAppear - перезагружает базовый массив, вызывает [_tableView reloadData]
- viewControllerInQuestion: numberOfRowsInSection - возвращает 1
- делегат приложения: didSontrolOntlViewC1051 *
- secondTabBarRootViewController: viewWillAppear - вызывает метод для viewControllerInQuestion, который очищает содержимое базового массива
- viewControllerInQuestion: cellForRowAtIndexPath - сбой при попытке доступа к объекту с индексом 0 в базовом массиве. * 10 *
1057 *Спасибо за любую помощь, вы можете дать мне.