我试图从我调用的块中返回一个整数。你可以在下面看到:
-(NSInteger)globalRecord
{
__block NSInteger globalRecord = 0;
[GKLeaderboard loadLeaderboardsWithCompletionHandler:^(NSArray *leaderboards, NSError *error) {
GKLeaderboard *globalTaps = nil;
for (GKLeaderboard *lb in leaderboards) if ([lb.category isEqualToString:kGlobalLeaderboard]) globalTaps = lb;
[globalTaps loadScoresWithCompletionHandler:^(NSArray *scores, NSError *error) {
if ([scores count] != 0)
{
GKScore *topScore = [scores objectAtIndex:0];
globalRecord = topScore.value;
//42 here
}
}];
}];
//0 here
return globalRecord;
}
所以我试图从我的排行榜在游戏中心的最高分。我希望我的方法在收到分数后返回它;但是它没有返回我的分数。
在块中,它识别得分,在本例中为42,但是一旦我们到达块外并希望返回值,它就为0。
3条答案
按热度按时间cs7cruho1#
loadLeaderboardsWithCompletionHandler
和loadScoresWithCompletionHandler
异步工作。来自文档:调用此方法时,它将创建一个新的后台任务来处理请求。然后,该方法将控制权返回给您的游戏。稍后,当任务完成时,Game Kit调用您的完成处理程序。...
这意味着
在完成块中为
globalRecord
赋值之前返回。mklgxw1f2#
你得到的是零,因为return实际上是在块执行之前被调用的。要获取
globalRecord
的值,您应该在块loadScoresWithCompletionHandler
结束时使用回调:3hvapo4f3#
例如:
小心点!
此示例将阻止调用此方法的线程