Mam tricky problem dotyczący aktualizacji mój Tableview, i uzyskać różne wyniki przy użyciu różnych metod aktualizowania go, pozwól mi wyjaśnić:Tableview reloadData vs. beginUpdates & endUpdates
Sytuacja 1: używam [tbl reloadData];
gdzie tbl
to mój TableView, aby zaktualizować TableView - działa zgodnie z przeznaczeniem.
Sytuacja 2: używam:
[tbl beginUpdates];
[tbl reloadRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationRight];
[tbl endUpdates];
Gdzie jest moja Tableview tbl
i indexPaths
jest tablicą zawierającą wszystkie indexPaths obecne w Tableview. Teraz tablica jest w porządku, zawiera wszystkie poprawne pola indexPaths (podwójne i potrójne zaznaczone), ale z jakiegoś powodu - to nie działa zgodnie z przeznaczeniem.
Teraz zdaję sobie sprawę, że jest to problem XY (gdzie pytam o Y, ale mój problem jest naprawdę X, ponieważ myślę, że rozwiązanie Y rozwiąże X) i to tylko dlatego, że uważam, że to trochę skomplikowane wyjaśnienie X (konsekwencja powyższy problem) w łatwy sposób, więc wolałbym od tego powstrzymać się, jeśli to możliwe.
Tak więc, na moje pytanie: Czy istnieje różnica między dwoma sposobami aktualizowania TableView (oprócz oczywiście animacji) lub czy powinienem podejrzewać, że problem leży gdzieś indziej?
EDIT: Dobra, postaram się wyjaśnić, jakie objawy są:
W cellForRowAtIndexPath
-method dodać przycisk do każdej komórki z przypisanym tagiem który jest równy komórki indexPath rzędu jak takie:
btn.tag = indexPath.row;
powodem robię to więc mogę zidentyfikować każdy przycisk jak wszyscy nazywają tę samą funkcję:
- (void)btnPressed:(id)sender
Kiedy następnie aktualizuję komórki - ponieważ niektóre wartości w komórkach się zmieniły - Sytuacja 1 sprawia, że wszystko działa poprawnie, Sytuacja 2 jednak - miesza tagi, aby następnym razem nacisnąć jeden z przycisków, nie mają już poprawne tagi.
Mieszanie wydaje mi się losowe, ale losowość przebiega różnie, w zależności od tego, który przycisk komórki naciska się najpierw. Mam nadzieję, że to wyjaśni mój problem.
"Otrzymuję różne wyniki", "to nie działa zgodnie z przeznaczeniem." W jaki sposób? – TigerCoding
Cóż, każda komórka otrzymuje przycisk przy tworzeniu, z tagiem, gdzie 'tag przycisku = wiersz ścieżki indeksu'. W sytuacji 1 przycisk otrzymuje poprawną etykietę, w sytuacji 2 - nie. –