Я сделал эту ошибку - как только вы сделаете это и исправите один раз, вы никогда не забудете:)
Экземпляры UITableViewCell кэшируются по соображениям производительности. Класс UITableView обрабатывает все это для вас. Он в основном кэширует достаточно экземпляров, чтобы охватить полноэкранную ячейку плюс несколько ячеек. Это означает, что таблица с 100 строками будет работать с тем же числом экземпляров, что и таблица с 1000 строками.
Это означает, что вы несете ответственность за обновление содержимого по мере его появления.
(UITableViewCell *) tableView: (UITableView *) tableView cellForRowAtIndexPath: (NSIndexPath *) indexPath вызывается при запросе ячейки. В вашей реализации:
if(cell == nil) {
// Instantiate the UITableViewCell here
// Perform operations that need to occur on every cell, regardless of content
}
// Out here, perform content assignments
Надеюсь, это прояснит некоторые вещи. В основном вам просто нужно сместить большую часть кода, который находится внутри условного, за пределы условного. Тем не менее, я не потворствую вашему использованию кода. Вы действительно должны реализовать пользовательскую ячейку. Это проще, чем то, что вы делаете:)