2009-04-03 19 views
6

Mam UITableViewController jako RootViewController. Muszę dodać wiersze do tabeli w zależności od danych, które otrzymuję z innego wątku zainicjowanego przez wątek RootViewController. Kiedy wracam z innego wątku do mojego wątku RootViewController mam zaktualizowane dane, ale nie mogę zaktualizować TableView. Nazwałem metodę [self.tableview reloadData];, ale to nie działa. Próbowałem też połączenia [self.tableview setNeedsDisplay], ale bez powodzenia. Jak zaktualizować TableView o nowe dane?Nie można zaktualizować UITableView

In my RootViewController Class I have: 

- (void) reload { 

for(int i=0;i<[camDetails count];i++) 
{ 
    cCameraInformation *obj = [[cCameraInformation alloc] init]; 
    obj = [camDetails objectAtIndex:i]; 
    NSString *tString = [[NSString alloc] initWithFormat: @"  Remote  %s  %s",[obj->sCameraid UTF8String],[obj->sCameraid UTF8String]]; 
    [tableEntry addObject:tString]; 
} 
[self.tableView reloadData]; 
} 

Następnie istnieje wątek klasy odbierania, który nieprzerwanie odbiera dane. Jego podstawową klasą jest NSObject. Tak więc użyłem klasy delegatów aplikacji (która ma instancję klasy RootViewController) do wywołania tej metody ponownego ładowania klasy RootViewController w moim wątku odbierającym.

Nie mogę wywołać powyższej metody przy użyciu performSelectorOnMainThread.

Odpowiedz

12

hej, czy na pewno aktualizujesz wyświetlanie widoku tabeli/ponowne ładowanie tableview w głównym wątku? I w obliczu tego samego problemu, dane było tam jednak aż użytkownik przewija, tableview nie została zaktualizowana

na googlowania poznałem trzeba wywołać metodę reloadData na głównym wątku UI

przykładowy kod poniżej:

- (void) getDataOnNewThread 
{ 
    // code here to populate your data source 
    // call refreshTableViewOnMainThread like below: 
    [self performSelectorOnMainThread:@selector(refreshTableView) withObject:nil waitUntilDone:NO]; 
} 

- (void) refreshTableView 
{ 
    [tableView reloadData]; 
} 
1

Upewnij się, że masz ustawione prawidłowe wartości z numberOfRowsForSection na początek.

Upewnij się również, że twoja metoda cellForRowAtIndexPath używa tych danych do pobrania zawartości komórki.

Twoja metoda reloadData powinna zostać wywołana w głównym wątku, a nie w żadnym innym wątku.

Będą mogli Ci pomóc lepiej, jeśli umieścisz odpowiedni kod.

Powiązane problemy