使用RoboVM和libgdx向GameCenter提交分数

使用RoboVM和libgdx向GameCenter提交分数,libgdx,robovm,game-center-leaderboard,Libgdx,Robovm,Game Center Leaderboard,我正在使用libgdx和robovm 当我尝试在iOS上的GameCenter上将分数提交到排行榜时,我遇到了一个错误。我能够显示排行榜。这是我得到的错误: ***由于未捕获的异常“GKInvalidArgumentException”而终止应用程序,原因是:“GKScore必须指定排行榜。” libc++abi.dylib:以NSException类型的未捕获异常终止 这与此相似,但它是客观的,所以我不明白答案 这是我显示排行榜的代码(这很有效) 这是我提交分数的代码(这不起作用) publi

我正在使用libgdx和robovm

当我尝试在iOS上的GameCenter上将分数提交到排行榜时,我遇到了一个错误。我能够显示排行榜。这是我得到的错误:

***由于未捕获的异常“GKInvalidArgumentException”而终止应用程序,原因是:“GKScore必须指定排行榜。”
libc++abi.dylib:以NSException类型的未捕获异常终止

这与此相似,但它是客观的,所以我不明白答案

这是我显示排行榜的代码(这很有效)

这是我提交分数的代码(这不起作用)

public void submitScoreGPGS(整数分数,MyLeadBoardCallback回调){
//如果玩家未通过身份验证,请不要执行任何操作
如果(!GKLocalPlayer.getLocalPlayer().isAuthenticated()){
//scoreReportFailed(buildUnauthenticatedPlayerError());
Gdx.app.log(“游戏中心”、“Notlogedin”);
回来
}
GKScore scoreReporter=新的GKScore(标识符);
scoreReporter.setValue(分数);
scoreReporter.setLeaderboardIdentifier(标识符);
//scoreReporter.setShouldSetDefaultLeaderboard(真实);
//scoreReporter.setContext(0);
NSArray分数=新NSArray(scoreReporter);
Gdx.app.log(“游戏中心”、“报告中心”);
GKScore.reportScores(分数,新的VoidBlock1(){
@凌驾
公共无效调用(N错误){
if(错误!=null){
Gdx.app.log(“Gamecenter”、“scorereportfailed”);
}否则{
Gdx.app.log(“Gamecenter”、“scorereportcompleted”);
}
}
});
}

有人知道问题出在哪里吗?我尝试过谷歌搜索,但几乎没有关于“robovm和gamekit/gamecenter”的信息。

由于某种原因,包含排行榜id的变量被垃圾收集。必须在
scoreReporter.setLeaderboardIdentifier(“我的硬编码id”)处对字符串进行硬编码。奇怪

public void getLeaderboardGPGS() {

    // If player is not authenticated, do nothing
    if (!GKLocalPlayer.getLocalPlayer().isAuthenticated()) {
        return;
    } 
    GKGameCenterViewController gameCenterView = new GKGameCenterViewController();

    gameCenterView.setGameCenterDelegate(new GKGameCenterControllerDelegateAdapter() {
        @Override
        public void didFinish (GKGameCenterViewController gameCenterViewController) {
            dismissViewControllerAndNotifyListener(gameCenterViewController, GKGameCenterViewControllerState.Leaderboards);
        }
    });
    gameCenterView.setViewState(GKGameCenterViewControllerState.Leaderboards);

    gameCenterView.setLeaderboardIdentifier(identifier);


    keyWindow.getRootViewController().presentViewController(gameCenterView, true, null);
}
public void submitScoreGPGS(int score, MyLeaderBoardCallback callback) {

    // If player is not authenticated, do nothing
    if (!GKLocalPlayer.getLocalPlayer().isAuthenticated()) {
        //listener.scoreReportFailed(buildUnauthenticatedPlayerError());
        Gdx.app.log("Gamecenter","Notlogedin");
        return;
    }
    GKScore scoreReporter = new GKScore(identifier);

    scoreReporter.setValue(score);
    scoreReporter.setLeaderboardIdentifier(identifier);
    //scoreReporter.setShouldSetDefaultLeaderboard(true);
    //scoreReporter.setContext(0);

    NSArray<GKScore> scores = new NSArray<GKScore>(scoreReporter);

    Gdx.app.log("Gamecenter","Report socre");
    GKScore.reportScores(scores, new VoidBlock1<NSError>() {
        @Override
        public void invoke (NSError error) {
            if (error != null) {
                Gdx.app.log("Gamecenter","scorereportfailed");
            } else {
                Gdx.app.log("Gamecenter","scorereportcompleted");
            }
        }
    });

}