我在這裏面臨一個小問題,我希望有人能幫我弄清楚什麼是錯的。再次出現GameCenter驗證碼
*下面介紹可以在這裏找到測試項目:http://goo.gl/wz84aA(FR)或https://goo.gl/0m8LrZ(Mega.NZ)*
我想呈現給用戶的GameCenter的提議通過蘋果認證的視圖控制器特徵。更確切地說,如果他第一次取消它,請重新提交。
我有一個遊戲一樣,故事板:
GameNavigationController:
class GameNavigationController: UINavigationController {
override func viewDidLoad() {
super.viewDidLoad()
NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("showAuthenticationViewController"), name: PresentAuthenticationViewController, object: nil)
GameKitHelper.sharedInstance.authenticateLocalPlayer()
}
func showAuthenticationViewController() {
let gameKitHelper = GameKitHelper.sharedInstance
if let authenticationViewController = gameKitHelper.authenticationViewController {
self.topViewController.presentViewController(authenticationViewController, animated: true, completion: nil)
}
}
deinit {
NSNotificationCenter.defaultCenter().removeObserver(self)
}
}
MenuViewController:
class MenuViewController: UIViewController {
@IBAction func didTapLeaderboardBTN() {
// TRY 2
//if (!GameKitHelper.sharedInstance.gameCenterEnabled) {
GameKitHelper.sharedInstance.authenticateLocalPlayer()
//} else {
GameKitHelper.sharedInstance.showGKGameCenterViewController(self)
//}
}
}
GameKitHelper:
import GameKit
import Foundation
let PresentAuthenticationViewController = "PresentAuthenticationViewController"
let singleton = GameKitHelper()
class GameKitHelper: NSObject, GKGameCenterControllerDelegate {
var authenticationViewController: UIViewController?
var lastError: NSError?
var gameCenterEnabled: Bool
class var sharedInstance: GameKitHelper {
return singleton
}
override init() {
gameCenterEnabled = true
super.init()
}
func authenticateLocalPlayer() {
let localPlayer = GKLocalPlayer.localPlayer()
localPlayer.authenticateHandler = { (viewController, error) in
self.lastError = error
if viewController != nil {
self.authenticationViewController = viewController
NSNotificationCenter.defaultCenter().postNotificationName(PresentAuthenticationViewController, object: self)
} else if localPlayer.authenticated {
self.gameCenterEnabled = true
} else {
self.gameCenterEnabled = false
}
}
}
func showGKGameCenterViewController(viewController: UIViewController!) {
if (!self.gameCenterEnabled) {
println("Local player is not authenticated")
// TRY 1
//self.authenticateLocalPlayer()
return
}
let gameCenterViewController = GKGameCenterViewController()
gameCenterViewController.gameCenterDelegate = self
gameCenterViewController.viewState = .Leaderboards
viewController.presentViewController(gameCenterViewController, animated: true, completion: nil)
}
func gameCenterViewControllerDidFinish(gameCenterViewController: GKGameCenterViewController!) {
gameCenterViewController.dismissViewControllerAnimated(true, completion: nil)
}
}
什麼是目前的工作:
- 如果用戶事先登錄(GameCenter的在應用程序中),那麼他能夠打開排行榜視圖;
- 如果用戶未登錄,那麼當遊戲導航控制器加載(然後打開排行榜)時,系統會提示他登錄。
究竟是不是目前的工作:
- 如果他取消三個時間的認證,那麼認證將不再(甚至在發射)出現; //顯然已知的「問題」,而不是「可以解決的」
- 如果用戶取消其認證,當他試圖加載認證將不會再出現在領先榜上。
我嘗試了2-3件事情,你可以在上面的註釋代碼中看到,但它們都不工作;我無法使認證視圖再次出現。
PS:我的代碼是用Swift編寫的,但Objective-C的幫助也很受歡迎。