【发布时间】:2016-05-20 01:05:10
【问题描述】:
我为我的游戏设置了 GameCenter 回合制比赛。现在我只是想显示当前 GK 玩家的当前比赛列表。
这是我的代码:
GKTurnBasedMatch.loadMatchesWithCompletionHandler { (matchesOpt, errorOpt) in
if let error = errorOpt {
print("Error loading matches: \(error.localizedDescription)")
} else if let matches = matchesOpt {
self.matches = matches
self.gamesTableView.reloadData()
} else {
print("Matches array is nil")
}
}
}
第三种情况总是命中,matches 数组为 nil。
我认为应该有比赛。我正在使用
GKTurnBasedMatch.findMatchForRequest
开始比赛,它正在成功。此外,如果我从 findMatchForRequest 中记下匹配的 matchId,然后我调用
GKTurnBasedMatch.loadMatchWithID(matchId)
它使用正确的匹配数据和所有内容找到匹配项。
有谁知道我如何让 loadMatchesWithCompletionHandler 返回可以通过 id 检索的相同游戏?
编辑:这是验证码:
GKLocalPlayer.localPlayer().authenticateHandler = { (viewControllerOpt, errorOpt) in
NSLog("GK local player authentication finished. Error: \(errorOpt)")
if let viewController = viewControllerOpt {
self.presentViewController(viewController, animated: true, completion: nil)
}
GKLocalPlayer.localPlayer().registerListener(self)
}
【问题讨论】:
-
可以添加验证本地用户的代码吗?
-
另一件事要检查,在
findMatchForRequest和loadMatchWithID完成处理程序中,尝试转储participants数组以查看本地播放器处于什么状态。 -
编辑:添加验证码。
-
@Thunk,无论是在创建匹配之后,还是在使用 loadMatchWithID 检索时,本地播放器的状态都是 Active。未匹配的第二个玩家的状态为 Matching。
-
可能与此问题无关,但请在您的身份验证处理程序中注意:设置错误时,viewController 将为 nil。因此,他们以您的方式进行编码,如果发生错误,您将打印一条消息,然后立即尝试注册未经身份验证的侦听器。这可能不是这里的问题,但以后可能会咬你。有关详细信息,请参阅stackoverflow.com/a/35677324/1641444。
标签: ios iphone game-center gamekit gkturnbasedmatch