Mam splitViewController, który ma jako MasterViewController niektóre viewController i jako DetailViewController niektóre tableViewController. Po naciśnięciu przycisku na masterViewController chcę wyświetlić nowy tableViewController w detailViewController zamiast istniejącego.UITableView reloadData - cellForRowAtIndexPath nie został uruchomiony
Więc zrobiłem tak:
SearchDetailViewController *searchDetailViewController = [[SearchDetailViewController alloc] initWithStyle:UITableViewStylePlain];
UINavigationController *searchDetailNavigationController = [[UINavigationController alloc] initWithRootViewController:searchDetailViewController];
Po tym ja przekazywania danych, aby pokazać się w nowym tableController:
[searchDetailViewController passInSearchResults:listOfItems];
Potem "push" Nowe sterowniki do splitViewController:
[searchSplitViewController setViewControllers:[NSArray arrayWithObjects:self.navigationController, searchDetailNavigationController, nil]];
W tabeli docelowej metodaViewController przekazuje dane "passInSearchResults", a także wywołuje funkcję reloadDa ta. Metoda wygląda tak:
- (void)passInSearchResults:(NSMutableDictionary *)searchResults {
self.searchResultList = searchResults;
NSLog(@"Data is passed in: %@",self.searchResultList);
[self.tableView reloadData];
//[self.tableView setNeedsDisplay];
}
konsoli: Dane są przekazywane w: [tu uzyskać dokładne dane chcę i wydaje się tylko w prawo].
After this I see that method "numberOfRowsInSection" is fired:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
NSLog(@"Setting table length: %i",[self.searchResultList count]);
return [self.searchResultList count];
}
konsoli: Ustawianie długość stołu: [tu mam odpowiedniej długości]
Problem polega na tym, że tabela nie jest wypełniona przekazywanych danych i metoda „cellForRowAtIndexPath” nie nazywa.
Jak to możliwe, że na reloadData metoda "numberOfRowsInSection" jest uruchamiana, ale nie metoda "cellForRowAtIndexPath" ... ???
Dzięki
Nie jest konieczne sprawdzenie, czy najpierw uruchomiony jest główny wątek. Funkcja 'performSelectorOnMainThread' działa, nawet gdy już znajdujesz się w głównym wątku, podobnie jak' dispatch_async (dispatch_get_main_queue() '(prawdopodobnie to właśnie tutaj chcesz). Dodanie' if' tutaj po prostu zużywa niepotrzebne cykle procesora. –