0

我正在创建一个公共方法来从我的 gamecenterhelper.m 返回我的所有比赛

我有这个:

+(NSArray *)retrieveMatchesWithMatchData {
    __block NSArray *myMatches = nil;
    [GKTurnBasedMatch loadMatchesWithCompletionHandler:^(NSArray *matches, NSError *error) {
        if (error) {
            NSLog(@"There was an error loading matches");
        }
        else {
            myMatches = matches;
        }
    }];
    return myMatches;
}

但是当我调用它时它返回 null,即使我有活动的匹配项。调用方法如下所示:

NSLog(@"My matches: %@",[GameCenterHelper retrieveMatchesWithMatchData]);

谢谢你的时间!

4

1 回答 1

0

这就是块的本质。您的块是异步执行的。您无法同步加载 Game Center 比赛。让我们让它成为一个实例方法:

-(void)retrieveMatchesWithMatchData {
    [GKTurnBasedMatch loadMatchesWithCompletionHandler:^(NSArray *matches, NSError *error) {
        if (error) {
            NSLog(@"There was an error loading matches");
        }
        else {
            [self matchesLoaded:matches];
        }
    }];
}

然后你用这个方法处理匹配:

-(void)matchesLoaded:(NSArray *)matches {
    //do something with your matches
}

编辑:

有一种简单的方法可以做你想做的事。您可以使用 Apple 的标准视图控制器来显示当前匹配项:

GKMatchRequest *request = [[GKMatchRequest alloc] init]; 
request.minPlayers = minPlayers;     
request.maxPlayers = maxPlayers;

GKTurnBasedMatchmakerViewController *mmvc = 
[[GKTurnBasedMatchmakerViewController alloc] 
 initWithMatchRequest:request];
mmvc.turnBasedMatchmakerDelegate = self;
mmvc.showExistingMatches = YES;
[self presentViewController:mmvc animated:NO completion:nil];
于 2013-03-14T22:01:04.457 回答