Постоянное хранилище prefilled
должно быть доступно только для чтения, если оно поставляется в комплекте приложений, так как все в комплекте приложений доступно только для чтения. Чтобы использовать данные в постоянном хранилище с возможностью чтения и записи, вам необходимо скопировать данные в постоянное хранилище вне пакета приложения, например, в каталоге документов для приложения.
У вас есть два способа сделать это:
1) Самое простое: создать новый постоянный магазин для каждой игры. В этом случае вы просто скопируете файл постоянного хранилища prefilled
из каталога приложения в каталог документов в процессе переименования его в текущее имя игры. Затем вы откроете этот файл как gameDB
, и он будет автоматически заполнен существующими данными. Недостатком этой системы является то, что у вас есть большое количество файлов, по одному для каждой игры, и данные не могут быть легко переданы между ними.
2) Лучше: вы используете два постоянных хранилища одновременно в одном и том же контексте. Это сложнее в настройке, но дает вам большую гибкость. Хитрость заключается в том, чтобы создать одну абстрактную сущность, например, Opponent
и затем две конкретные сущности, которые идентичны, за исключением их имен, например PreOpponent
и GameOpponent
. Используя опцию конфигурации в модели данных, присвойте PreOpponent
постоянному хранилищу prefilled
и GameOpponent
постоянному хранилищу gameDB
. Напишите некоторый код в классе Opponent
, чтобы клонировать себя в новый экземпляр GameOpponent
. Когда начинается новая игра, клонируйте все экземпляры от prefilled
до 'gameDB'. Все вновь клонированные GameOpponent
экземпляры будут автоматически записывать в постоянное хранилище gameDB
.
Преимущество последней системы заключается в том, что у вас есть все ваши активные данные в одном постоянном хранилище с возможностью перезаписи, которым вы можете манипулировать при необходимости. Например. Вы можете проверить предыдущую игру или даже клонировать предыдущую, чтобы создать новую отправную точку для новой игры.
На сайте Маркуса Зарруса есть код, показывающий, как настроить автоматическое клонирование для управляемых объектов.