Как сохранить пользовательский объект, который нельзя изменить в UserDefaults? - PullRequest
0 голосов
/ 21 марта 2020

Я создаю игру, в которой используется фреймворк, в котором есть бот для глубокого обучения. Я могу получить доступ к боту с помощью класса GameSession (), чтобы заставить его работать, мне нужно отправить ему свой ход gameSession.userPlay (x), а затем попросить его сделать свой ход (gameSession.move ()). Проблема в том, что у меня нет доступа к текущему состоянию игры, которое я могу сохранить и использовать как постоянное. Я не могу изменить этот класс, так как это среда для его кодирования.

Итак, я хочу как-то сохранить объект gameSession () в пользовательских ошибках по умолчанию, так как это единственный способ добиться постоянства, когда приложение закрыто. Если я просто сохраню состояние экрана, которое имею и могу сохранить, то при повторной загрузке приложения бот не будет go в этом состоянии, поскольку его действия не могут быть предсказаны. Например, он может сделать два разных ответа на одно и то же действие.

Вот как это в основном работает как игра в шахматы:

  1. Я создаю сессию,
  2. Я разрешаю пользователю выбрать свой ход -> передать эти данные в сессию, чтобы бот знает, что сделал пользователь,
  3. Я получаю ответный ход от бота, а затем использую действие ботов, чтобы изменить обновление игры.

Теперь я хочу иметь возможность закрыть приложение после нескольких перемещений и загрузить его обратно. Я использовал, чтобы сделать объекты кодируемыми, но это не могу изменить, если я создаю другой класс, который реализует кодируемый и затем имеет сессию в качестве объекта, я не могу кодировать и декодировать этот специальный объект.

Есть ли у кого-нибудь предложения?

1 Ответ

1 голос
/ 21 марта 2020

Обычно эти платформы делают следующее: рассматриваемый объект либо сериализуем с NSCoding, либо он передает вам, по запросу, некоторый объект, сохраняющий состояние, который сериализуется с NSCoding. Затем вы можете заархивировать и восстановить это. Посмотрите через API для типа объекта, который где-то говорит NSCoding.

Я говорю NSCoding, потому что это давняя цель сериализации C. Codable - это Swift, и он довольно новый.

В любом случае, ваша цель - преобразовать состояние в объект Data / NSData, потому что это то, что вы можете хранить на диске или в пользовательских настройках. (Возможно, API фреймворка фактически делает это для вас и передает вам объект Data напрямую; ищите это тоже.)

Если в этой фреймворке такой функции нет, вы не можете поддерживать состояние между запусками и не должны использовать эта структура, так как она не подходит для iOS.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...