有没有“更短”的方式来写它?获得playerViewController实例似乎还有很长的路要走......
UIWindow *window = [UIApplication sharedApplication].keyWindow;
UITabBarController *tabBarController = (UITabBarController *)window.rootViewController;
UINavigationController *navigationController = [[tabBarController viewControllers] objectAtIndex:0];
PlayersViewController *playersViewController = [[navigationController viewControllers] objectAtIndex:0];
[playersViewController.tableView performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:NO];
我正在刷新已经加载的tableView
#pragma mark - RatePlayerViewControllerDelegate
- (void)ratePlayerViewController: (RatePlayerViewController *)controller didPickRatingForPlayer:(Player *)player
{
if (player.rating != self.requiredRating)
{
// do stuff.. in self.tableView
// refresh players tableView
答案 0 :(得分:1)
您可以使用通知
<强> PlayersViewController.m 强>
在init方法中添加以下行:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reloadPlayers:) name:@"reloadPlayersNotification" object:nil];
并实施方法
- (void)reloadPlayers:(NSNotification *)notification {
[self.tableView reloadData];
}
当tableView不能接收reloadData调用时(例如,如果tableView不可见),请记住删除观察者。
[[NSNotificationCenter defaultCenter] removeObserver:self name@"reloadPlayersNotification" object:nil]
现在如果你想从另一个类重新加载这个tableView:
[[NSNotificationCenter defaultCenter] postNotification:@"reloadPlayersNotification"];
答案 1 :(得分:0)
如果您想重新加载UITableView
,请使用[self.tableView reloadData]
编辑:还有一件事要记住,你应该总是更新主线程上的视图。我不确定你到底做了什么,但是安全而不是抱歉永远不会伤害。以下内容将在主线程上重新加载tableView。
dispatch_async(dispatch_get_main_queue(), ^{
[self.tableView reloadData];
});