У меня есть splitViewController, у которого в качестве MasterViewController есть некоторый viewController и как DetailViewController некоторый tableViewController. Когда я нажимаю кнопку на masterViewController, я хочу показать новый tableViewController в detailViewController вместо существующего.UITableView reloadData - cellForRowAtIndexPath не активирован
Так что я сделал так:
SearchDetailViewController *searchDetailViewController = [[SearchDetailViewController alloc] initWithStyle:UITableViewStylePlain];
UINavigationController *searchDetailNavigationController = [[UINavigationController alloc] initWithRootViewController:searchDetailViewController];
После этого я передаю данные, чтобы показать в новом tableController:
[searchDetailViewController passInSearchResults:listOfItems];
После того, что я "толчок" новые контроллеры splitViewController:
[searchSplitViewController setViewControllers:[NSArray arrayWithObjects:self.navigationController, searchDetailNavigationController, nil]];
В целевой таблицеViewController передаются данные passInSearchResults, и я также вызываю reloadDa та. Метод выглядит следующим образом:
- (void)passInSearchResults:(NSMutableDictionary *)searchResults {
self.searchResultList = searchResults;
NSLog(@"Data is passed in: %@",self.searchResultList);
[self.tableView reloadData];
//[self.tableView setNeedsDisplay];
}
Console: Данные передаются в: [здесь я получить точные данные, которые я хочу, и это, кажется, впору].
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];
}
консоли: Установка длины таблицы: [здесь я получаю правильную длину]
Проблема заключается в том, что таблица не заполнена передаваемых данных и метод «cellForRowAtIndexPath» не называется.
Как это может быть, что при перезагрузке метод «numberOfRowsInSection» уволен, но не метод «cellForRowAtIndexPath» ... ???
Благодаря
Нет необходимости проверять, что вы работаете в основном потоке. 'performSelectorOnMainThread' работает даже в том случае, если вы уже находитесь в основном потоке, как и' dispatch_async (dispatch_get_main_queue() '(что, вероятно, вам действительно нужно здесь). Добавление' if' здесь просто потребляет ненужные циклы процессора. –