我正在使用Game Center的回合制比赛来构建游戏。
我想显示所有可用匹配项的列表。我尝试使用loadMatchesWithCompletionHandler()
,但游戏数组返回nil
,错误也返回nil
。有一些正在进行的比赛。
这是我到目前为止所做的:
func authenticateLocalUser() {
if !gameCenterAvailable { return }
let player = GKLocalPlayer.localPlayer()
if player.authenticated == false {
player.authenticateHandler = {(viewController, error) -> Void in
if viewController != nil && self.presentingViewController != nil
{
self.presentingViewController!.presentViewController(viewController!, animated: true, completion: {
GKLocalPlayer.localPlayer().registerListener(self)
GKTurnBasedMatch.loadMatchesWithCompletionHandler({games, error in
print(games)
if games != nil {
print(games!.count)
}else {
print(error)
}
})
})
} else {
if player.authenticated == true {
GKLocalPlayer.localPlayer().registerListener(self)
GKTurnBasedMatch.loadMatchesWithCompletionHandler({games, error in
print(games)
if games != nil {
print(games!.count)
}else {
print(error)
}
})
}
}
}
} else {
print("already authenticated")
}
}
我甚至在创建新匹配时获得nil
(它会打印我刚刚创建的匹配项):
func findMatchWith(minPlayers: Int, maxPlayers: Int) {
if !gameCenterAvailable { return }
let request = GKMatchRequest()
request.minPlayers = minPlayers
request.maxPlayers = maxPlayers
request.defaultNumberOfPlayers = 2
GKLocalPlayer.localPlayer().loadFriendPlayersWithCompletionHandler({players, error in
if error != nil {return}
request.recipients?.append(players![0])
GKTurnBasedMatch.findMatchForRequest(request, withCompletionHandler: { match, error in
if error != nil {
print(error?.localizedDescription)
return
}
print(match)
GKTurnBasedMatch.loadMatchesWithCompletionHandler({games, error in
print(games)
if games != nil {
print(games!.count)
}else {
print(error?.localizedDescription)
}
})
})
})
}
答案 0 :(得分:2)
这不是代码。这就是在iTunes Connect中设置游戏的方式。我需要这样做:
稍后,我将尝试删除排行榜,看看它是否仍然有效。实际的应用程序不会有排行榜。
我的困惑是因为我没有得到#34;无法识别的游戏"错误,我能够创建比赛,转弯,列出玩家的朋友,但不能列出匹配。
答案 1 :(得分:0)
从你已经展示过的片段来说,这有点难以辨别。要仔细检查的事情:
您认为如果.authenticated
为YES,那么您已登录。不幸的是,这并非总是如此。 GC将在无法与GC服务器通信但使用先前会话的缓存数据的情况下报告YES。 (通常情况下,当您在此状态下尝试加载匹配项时,实际上会收到有关未经过身份验证的错误)
如果VC为零,则假设您已通过身份验证。这也不总是正确的。如果设置了错误,VC也将为零。始终在身份验证处理程序中首先检查错误的值。 (我现在不认为这会对您的问题产生影响,因为再次:如果您在实际未经过身份验证时尝试加载匹配项,则会出现错误)
查看我的身份验证处理程序示例,该处理程序可以捕获各种边缘情况和失败