我正在使用 Game Center 和GKTurnBasedMatch
.
为了在我的根控制器的表格视图中显示游戏列表,我调用了以下方法:
-(void)reloadTableView
{
self.matchesTable.hidden = YES;
[_activityIndicator startAnimating];
[GKTurnBasedMatch loadMatchesWithCompletionHandler: ^(NSArray *matches, NSError *error)
{
if (error)
{
NSLog(@"loadMatchesWithCompletionHandler error:- %@", error.localizedDescription);
} else
{
for (GKTurnBasedMatch *m in matches)
{
// Download match data for each match
[m loadMatchDataWithCompletionHandler:^(NSData *matchData, NSError *error)
{
if (error)
{
NSLog(@"loadMatchDataWithCompletionHandler:- %@", error);
} else
{
[self processMatches]; // extracts match data to use in UI
}
}];
// Snipped - Code here to add each match to the relevant array ('My turn', 'Their turn' or 'Game over') for display in the table
}
[self.matchesTable reloadData];
self.matchesTable.hidden = NO;
[_activityIndicator stopAnimating];
}
}];
}
我希望任务的顺序是:
1) 隐藏matchesTable
并启动活动指示器
2) 调用loadMatchesWithCompletionHandler
3) 对于每场比赛,调用loadMatchDataWithCompletionHandler
4)[self processMatches]
在每场比赛上调用
5) 将每场比赛放入相关数组
6) 停止活动指示器并显示matchesTable
但是,代码一直运行得如此之快,以至于在任何匹配数据有时间下载之前执行第 6 点,这意味着旧数据显示在我的表中。
所以我的大问题是:如何让程序等到每场比赛都下载了比赛数据,然后再继续执行其余的方法?(即在第 4 点后暂停,只有在每场比赛的比赛数据下载完成后才开始第 5 点)