Swift 斯威夫特精灵游戏中心

Swift 斯威夫特精灵游戏中心,swift,ios8,Swift,Ios8,根据本网站和其他网站上的大量教程,我一直在尝试将我的游戏中心代码拆分为一个助手类 这是我当前在GameViewController.swift中的内容 func loadGameCenter() { var localPlayer = GKLocalPlayer.localPlayer() localPlayer.authenticateHandler = {(viewController, error) -> Void in if (viewCont

根据本网站和其他网站上的大量教程,我一直在尝试将我的游戏中心代码拆分为一个助手类

这是我当前在GameViewController.swift中的内容

func loadGameCenter() {

    var localPlayer = GKLocalPlayer.localPlayer()

    localPlayer.authenticateHandler = {(viewController, error) -> Void in

        if (viewController != nil) {

        self.presentViewController(viewController, 
        animated: true, completion: nil) //POINT 1
        }
        else {
            println((GKLocalPlayer.localPlayer().authenticated))
        }
    }
}
在我的MenuScene.swift中,这是一个SKScene场景,我有这个代码

func saveHighScore(highScore:Int) {

    if GKLocalPlayer.localPlayer().authenticated {
        var scoreReporter = GKScore(leaderboardIdentifier: leaderboardID)
        scoreReporter.value = Int64(highScore)

        var scoreArray: [GKScore] = [scoreReporter]
        GKScore.reportScores(scoreArray, withCompletionHandler: {(error : NSError!) -> Void in
            if error != nil {
                println("Error")
            }
        })
    }
}
func showGameCenter() {

    var vc = self.view!.window!.rootViewController! //POINT 2
    var gc = GKGameCenterViewController()
    gc.gameCenterDelegate = self
    gc.viewState = GKGameCenterViewControllerState.Leaderboards
    vc.presentViewController(gc, animated: true, completion: nil)
}
func gameCenterViewControllerDidFinish(gameCenterViewController: GKGameCenterViewController!) {

    gameCenterViewController.dismissViewControllerAnimated(true, completion: nil)
}
现在,我一直在尝试将上述代码放入名为GameCenter.swift的助手类中,该类是NSObject的子类。我在类名之后写了这篇文章,以便在我的其他场景中可以访问上面提到的方法(根据教程)

我遇到的问题是,当我试图从MenuScene.swift调用某些类函数时,例如“GameCenter.loadGameCenter()”或“GameCenter.ShowLeadboard()”,它会在第1-2点引发问题

换句话说,我需要如何重写旧的现有代码,使其在NSObject类中工作。我陷入困境,多年来一直在努力解决这个问题。
谢谢你的帮助。

我很久以前也解决过这个问题,但以防万一有人看到这个。 我只是将这些函数放在gameViewController中,用于显示登录屏幕或菜单,而不是以前在Helper类中的功能

func showGameCenterLogin() {

    self.presentViewController(GameCenter.sharedInstance.presentingViewController, animated: true, completion: nil)
}

func showGameCenterMenu() {

    GameCenter.showGameCenterMenu(self, viewState: .Default)
}

而不是在需要时通过NSNotificationCenter给他们打电话

为了记录分数,我只需使用相应的分数和/或排行榜ID调用函数来保存它,这是显而易见的,我不记得为什么这会导致我的问题

   GameCenter.sharedInstance.saveHighScore(highScore)
   GameCenter.sharedInstance.saveHighScore(highScore)