2015-12-22 55 views
5

Mam obecnie Game Center działające w moim celu na iOS, ale nie działające w celu tvOS.Centrum gier w tvOS nie wyświetla się

Mam już dodane obrazy Liderów i umieszczony identyfikator w Xcode tutaj:

enter image description here

Jest to klasa, która używam aby przywołać liderów i zainicjować odtwarzacza. To się nazywa GameKitHelper.swift:

import UIKit 
import Foundation 
import GameKit 

let PresentAuthenticationViewController = "PresentAuthenticationViewController" 

class GameKitHelper: NSObject { 

    static let sharedInstance = GameKitHelper() 


    var authenticationViewController: UIViewController? 
    var gameCenterEnabled = false 

    func authenticateLocalPlayer() { 

    //1 
    let localPlayer = GKLocalPlayer() 
    localPlayer.authenticateHandler = {(viewController, error) in 

     if viewController != nil { 
      //2 
      self.authenticationViewController = viewController 

       NSNotificationCenter.defaultCenter().postNotificationName(PresentAuthenticationViewController, object: self) 
     } 
    else if error == nil { 
      //3 
      self.gameCenterEnabled = true 
     } 
    } 

} 

func reportAchievements(achievements: [GKAchievement], errorHandler: ((NSError?)->Void)? = nil) { 
    guard gameCenterEnabled else { 
     return 
    } 

    GKAchievement.reportAchievements(achievements, withCompletionHandler: errorHandler) 
} 

func showGKGameCenterViewController(viewController: UIViewController) { 
    guard gameCenterEnabled else { 
     return 
    } 

    //1 
    let gameCenterViewController = GKGameCenterViewController() 

    //2 
    gameCenterViewController.gameCenterDelegate = self 

    //3 
    viewController.presentViewController(gameCenterViewController, animated: true, completion: nil) 
} 

    func saveHighScore(identifier: String, score: Int) { 

    if (GKLocalPlayer.localPlayer().authenticated) { 

     let scoreReporter = GKScore(leaderboardIdentifier: identifier) 
     scoreReporter.value = Int64(score) 

     let scoreArray:[GKScore] = [scoreReporter] 

     GKScore.reportScores(scoreArray, withCompletionHandler: { 

      error -> Void in 

      if (error != nil) { 

       print("error") 
      } 
      else { 

       print("Posted score of \(score)") 
      } 
     }) 
    } 
    } 
} 

extension GameKitHelper: GKGameCenterControllerDelegate { 
    func gameCenterViewControllerDidFinish(gameCenterViewController: GKGameCenterViewController) { 
    gameCenterViewController.dismissViewControllerAnimated(true, completion: nil) 
} 
} 

NavigationController klasa:

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 { 
     topViewController?.presentViewController(authenticationViewController, 
               animated: true, 
               completion: nil) 
    } 
    } 


    deinit { 
     NSNotificationCenter.defaultCenter().removeObserver(self) 
    } 
+0

Czy możesz dodać trochę więcej informacji? Czy sprawdziłeś, czy inicjalizacja użytkownika zakończyła się powodzeniem i czy wartość GameCenterEnabled jest prawdziwa? – Stefan

+0

@Stefan Sprawdź 'func authenticateLocalPlayer()'. Mam też inną klasę, która uruchamia jakiś kod Game Center, ale jestem pewien, że klasa, którą napisałem, jest główną klasą. Jak już mówiłem, działa to dobrze w iOS. Mogę nawet umieszczać na nim wysokie wyniki, ale nie na tvOS. – Paul

Odpowiedz

0

Upewnij się, że masz "Apple TV Dashboard Image" w katalogu aktywów Twojej aplikacji. Grafika pulpitu powinna mieć 923 x 150 z przezroczystością i nie musi być warstwowana, ponieważ użytkownik nie może jej wybrać.

Numer twierdzi, że grafika na desce rozdzielczej jest opcjonalna, ale z mojego doświadczenia wynika, że ​​GKGameCenterViewController odmówi pojawienia się, jeśli go nie masz.