Могу ли я иметь несколько обработчиков данных Core для одного приложения iphone? - PullRequest
0 голосов
/ 16 ноября 2010

Я хочу создать приложение с двумя основными обработчиками данных для одного приложения iphone.

Приложение будет спортивной игрой с предварительно заполненной информацией. Давайте назовем это prefilledDB в качестве ссылки. Эта prefilledDB будет только для чтения, я не хочу, чтобы пользователь добавил / отредактировал / удалил или изменил что-либо в этом.

Второй БД ("gameDB") будет иметь те же основные отношения / модели / сущности и структуру данных.

Когда пользователь выбирает «Новая игра», он очищает / очищает gameDB и заполняет ее содержимым prefilledDB, а «Continue game» просто использует prefilledDB, предполагая, что она не пуста.

Однако я не уверен, что это правильный способ сделать это. Поэтому мой вопрос заключается в том, как лучше всего справиться с такой обработкой. Будет ли встроенная система миграции лучше, чем удаление / воссоздание баз данных - или, возможно, просто использование SQLite в качестве prefilledDB и затем заполнение gameDB ее содержимым?

Любая помощь в этом была бы великолепна.

1 Ответ

2 голосов
/ 18 ноября 2010

Постоянное хранилище prefilled должно быть доступно только для чтения, если оно поставляется в комплекте приложений, так как все в комплекте приложений доступно только для чтения. Чтобы использовать данные в постоянном хранилище с возможностью чтения и записи, вам необходимо скопировать данные в постоянное хранилище вне пакета приложения, например, в каталоге документов для приложения.

У вас есть два способа сделать это:

1) Самое простое: создать новый постоянный магазин для каждой игры. В этом случае вы просто скопируете файл постоянного хранилища prefilled из каталога приложения в каталог документов в процессе переименования его в текущее имя игры. Затем вы откроете этот файл как gameDB, и он будет автоматически заполнен существующими данными. Недостатком этой системы является то, что у вас есть большое количество файлов, по одному для каждой игры, и данные не могут быть легко переданы между ними.

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

Преимущество последней системы заключается в том, что у вас есть все ваши активные данные в одном постоянном хранилище с возможностью перезаписи, которым вы можете манипулировать при необходимости. Например. Вы можете проверить предыдущую игру или даже клонировать предыдущую, чтобы создать новую отправную точку для новой игры.

На сайте Маркуса Зарруса есть код, показывающий, как настроить автоматическое клонирование для управляемых объектов.

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