У меня сложная проблема с обновлением моего TableView, я получаю разные результаты, используя разные методы его обновления, позвольте мне объяснить:
Ситуация 1:
Я использую [tbl reloadData];
, где tbl
- это мой TableView, чтобы обновить TableView - работает как задумано.
Ситуация 2:
Я использую:
[tbl beginUpdates];
[tbl reloadRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationRight];
[tbl endUpdates];
Где tbl
- это мой TableView, а indexPaths
- это массив, содержащий все indexPaths, присутствующие в TableView. Теперь с массивом все в порядке, он содержит все правильные indexPaths (проверенные дважды и трижды), но по какой-то причине - это работает не так, как задумано.
Теперь я понимаю, что это проблема XY (где я спрашиваю Y, но моя проблема действительно X, потому что я думаю, что решение Y решит X), и это только потому, что я чувствую, что объяснение X немного сложнее (следствие сказанного выше проблемы), поэтому я бы предпочел воздержаться от этого, если это возможно.
Итак, к моему вопросу: Есть ли разница между двумя способами обновления TableView (кроме битов анимации, конечно) или я должен подозревать, что проблема лежит в другом месте?
EDIT:
Хорошо, я постараюсь объяснить, каковы симптомы:
В методе cellForRowAtIndexPath
я добавляю кнопку в каждую ячейку с назначенным тегом, равным строке indexPath ячейки, например:
btn.tag = indexPath.row;
Причина, по которой я это делаю, заключается в том, что я могу идентифицировать каждую кнопку, поскольку все они вызывают одну и ту же функцию:
- (void)btnPressed:(id)sender
Когда я затем обновляю ячейки - поскольку некоторые значения в ячейках изменились - Ситуация 1 заставляет все работать нормально, однако Ситуация 2 - смешивает теги, поэтому при следующем нажатии одной из кнопок они больше не имеют правильные теги.
Перепутывание действительно кажется мне случайным, но рандомизация происходит по-разному в зависимости от того, какую кнопку с ячейками я нажимаю первой. Надеюсь, это прояснит мою проблему.