2011-12-19 2 views
7

Przeczytałem kilka artykułów na temat UITableView, w tym official doc, a niektóre na SO. Ale moja sytuacja wydaje się inna.
Chcę aktualizować tabelę przy każdym załadowaniu widoku. I muszę pobrać dane za pomocą żądania HTTP.
Co mam teraz jest:Jak zaktualizować UITableView w czasie wykonywania, po załadowaniu widoku

  1. Kiedy wprowadzić widok tabeli, należy użyć żądania HTTP non-synchroniczny, aby zaktualizować dane. Ponieważ nie chcę, aby główny wątek czekał. Jednym z miejsc do tego celu jest metoda tableView:cellForRowAtIndexPath:. Tak więc zwracam 0, ponieważ żadne dane nie istnieją na początku.
  2. Po otrzymaniu odpowiedzi HTTP aktualizuję wiersze głównego wątku, używając beginUpdates endUpdates insertRowsAtIndexPaths:withRowAnimation:
  3. Muszę zaktualizować "Źródło danych" w tym samym czasie, ale jak to zrobić?
    Czy powinienem utworzyć wątek demona i aktualizować moje dane co jakiś czas? Aby dane były gotowe po załadowaniu TableView.
+0

Dla rekordu można odwołać się do żądania, które nie jest synchroniczne, jako [asynchroniczne] (http://dictionary.reference.com/browse/asynchronous). To nie powinno brzmieć protekcjonalnie. Pozdrawiam, Thomas. –

Odpowiedz

13

Można by zrobić to tak:

  • Czy logiczną lub jakąś zmienną, gdzie można niezawodnie wykrywać czy masz wszystkie dane.
  • W viewWillAppear, zresetuj wszystko. Zacznij ładować swoje dane.
  • Jeśli nie masz jeszcze danych, wyświetlasz tylko jedną sekcję z jedną komórką (komórka zastępcza, która czyta "Ładowanie ..." i pokazuje na przykład spinner).
  • Po całkowitym załadowaniu danych ustawisz bool lub cokolwiek innego.
  • połączeń [self.tableView reloadData];

We wszystkich metodach UITableViewDataSource trzeba by sprawdzić, czy masz już lub nie danych. Jeśli nie, zwracasz dane zastępcze.

+0

Próbowałem, co powiedziałeś, To jest niesamowite! Dzięki! – Nickolas

1

[nazwa_tabeli reloadData]; pomoże Załaduj ponownie dane w tableview, można nazwać to po uzyskaniu odpowiedzi od serwera

1

Nie jestem pewien, czy istnieje "najlepsza metoda" do tego, co próbujesz osiągnąć tutaj. Sugerowałbym wypróbowanie metody, którą posiadasz i przekonanie się, czy zapewnia ona odpowiednie doświadczenie dla użytkownika (cokolwiek to znaczy dla ciebie), a jeśli nie, spróbuj czegoś innego. Zdecydowanie sugerowałbym posiadanie pewnego rodzaju wskaźnika "ładowania", gdy tabela jest pusta i czeka na odpowiedź http.

Jeśli chodzi o twoje pytanie o „źródle danych”, źródła danych o UITableView jest po prostu obiekt, który implementuje protokół UITableViewDataSource którym można przeczytać o here. Często zdarza się, że XCode utworzy obiekt UITableViewController, który będzie pełnić funkcję delegata i źródła danych w widoku tabeli. To, jak faktycznie przechowujesz swoje dane, zależy od Ciebie. Protokół źródła danych udostępnia metody, za pomocą których widok tabeli będzie "wymagał" danych, które musi załadować.

+0

Dzięki za twój link. – Nickolas