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]

編集:覚えておくべきことの1つは、常にメインスレッドでビューを更新する必要があることです。あなたが何をしているのか正確にはわかりませんが、後悔するよりも安全であることは決して悪いことではありません。以下は、メインスレッドで tableView をリロードします。

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