Game Center fetchSavedGames иногда возвращает пустой список игр, хотя при следующих попытках он работает корректноIOS

Программируем под IOS
Ответить
Anonymous
 Game Center fetchSavedGames иногда возвращает пустой список игр, хотя при следующих попытках он работает корректно

Сообщение Anonymous »

Я внедрил Game Center для аутентификации и сохранения игровых данных игрока. И аутентификация, и сохранение данных игрока все время работают корректно, но есть проблема с получением и загрузкой данных.
Игра работает так:
< 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
}
}
}
Я также добавил возможности Game Center и iCloud в xcode. Также в разделе iCloud я выбрал «Документы iCloud» и добавил контейнер.
Здесь я нашел похожий вопрос, но он не проясняет ситуацию.

Подробнее здесь: https://stackoverflow.com/questions/785 ... hough-it-w
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»