Игра работает так:
< ol>
[*]При запуске я запускаю аутентификацию
[*]После успешного входа игрока в систему я вызываю начало загрузки данных игрока, вызывая метод fetchSavedGames
[*]Если для игрока существуют игровые данные, я получаю список объекта SavedGame, содержащего данные игрока.
Проблема в том, что после того, как я удалил игру и установил ее снова, иногда список сохраненных игр оказывается пустым (шаг 3). Но если я не удалю игру и не открою ее снова, этот процесс будет работать нормально.
Вот полный код реализации Game Center:
Код: Выделить всё
class GameCenterHandler {
public func signIn() {
GKLocalPlayer.local.authenticateHandler = { viewController, error in
if let viewController = viewController {
viewController.present(viewController, animated: false)
return
}
if error != nil {
// Player could not be authenticated.
// Disable Game Center in the game.
return
}
// Auth successfull
self.load(filename: "TestFileName")
}
}
public func save(filename: String, data: String) {
if GKLocalPlayer.local.isAuthenticated {
GKLocalPlayer.local.saveGameData(Data(data.utf8), withName: filename) { savedGame, error in
if savedGame != nil {
// Data saved successfully
}
if error != nil {
// Error in saving game data!
}
}
} else {
// Error in saving game data! User is not authenticated"
}
}
public func load(filename: String) {
if GKLocalPlayer.local.isAuthenticated {
GKLocalPlayer.local.fetchSavedGames { games, error in
if let game = games?.first(where: {$0.name == filename}){
game.loadData { data, error in
if data != nil {
// Data loaded successfully
}
if error != nil {
// Error in loading game data!
}
}
} else {
// Error in loading game data! Filename not found
}
}
} else {
// Error in loading game data! User is not authenticated
}
}
}
Здесь я нашел похожий вопрос, но он не проясняет ситуацию.
Подробнее здесь: https://stackoverflow.com/questions/785 ... hough-it-w
Мобильная версия