0

有没有“更短”的写法?获得playersViewController实例似乎还有很长的路要走......

    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
4

2 回答 2

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"];
于 2013-11-13T14:12:08.267 回答
0

如果你想重新加载你的UITableView简单使用[self.tableView reloadData]

编辑:还要记住一件事,您应该始终更新主线程上的视图。我不确定你到底在做什么,但安全而不​​是后悔永远不会伤害你。以下将在主线程上重新加载您的 tableView。

dispatch_async(dispatch_get_main_queue(), ^{
    [self.tableView reloadData];
});
于 2013-11-13T13:58:37.903 回答