2009-07-13 6 views
5

Я пытаюсь создать 2 приложения, которые строят постоянный магазин, и другой, который его потребляет.Копирование файлов iPhone CoreData из одного проекта в другой

До сих пор я создал одно приложение, которое использует CoreData для успешной сборки базы данных из XML-файла. Таким образом, этот проект содержит модель данных, файлы .h/.m для объектов и т. Д.

Теперь я пытаюсь включить второе приложение для чтения этого файла .sqlite, скопировав файл модели данных. h/.m файлов, связанных с объектами и sqlite-файлом, в этот проект (через добавление существующего).

Код выполняет, но всегда не удается найти какие-либо объекты в базе данных.

Существуют ли какие-либо ограничения или правильные шаги при попытке скопировать эти файлы?

ответ

3

Решение здесь обманчиво просто.

Просто скопируйте файл .xcdatamodel из одного проекта в другой, а затем при первом запуске приложения в симуляторе создайте папку «Документы» для приложения. Просто отбросьте сохраненные .sqlite или .binary файлы в каталог yourApp/Documents на устройстве. Каталог симуляторов можно найти в разделе «~ user/Library/Application Support/iPhone Simulator».

Вы также можете загрузить, отредактировать и загрузить каталог myApp на подготовленном iPhone путем перетаскивания и выпадания из Organizer. Посмотрите список приложений.

iPhone не поддерживает хранилища xml с основными данными, только sqlite или атомарными (двоичными). Магазин sqlite, безусловно, лучший вариант для большинства приложений, поскольку он не все должен быть загружен в память во время выполнения.

Это вы имели в виду?

+0

Спасибо! Я скопировал пакет .xcdatamodeld из одного проекта в другой (с другим именем). Я даже переименовал файл и файл .xcdatamodel в нем (показать содержимое пакета) в соответствии с именем другого проекта, и он все еще работает нормально. Это страшно, потому что для меня все двоично. Хотелось бы, чтобы был способ разбить файлы. Надеемся, что файлы не содержат каких-либо конкретных проектов (например, название проекта). Убедитесь, что ваш код, который устанавливает стек Core Data, использует новое имя. И вы можете удалить приложение перед его повторным запуском, чтобы он мог воссоздать файл SQLlite. – ma11hew28

0

я думаю (не 100 процентов уверен) в вашем приложении PLIST, если вы установите имя пакета приложений к тому же, они будут совместно использовать ресурсы, так как устройство будет думать, что они одни и те же приложения ...

0

Я не думаю, что это будет работать так, как вы этого хотите. На iPhone каждое приложение работает в своей «песочнице», и одно приложение не может писать файлы, которые может читать другой.

+1

Но я верю, что если у них будет такой же путь, они будут делиться ресурсами – Daniel

+1

Но они считаются одним и тем же приложением – Daniel

+0

На самом деле, я должен был быть более ясным в своем оригинальном посте. То, что я пытаюсь сделать, - запустить одно приложение в симуляторе, чтобы создать базу данных (постоянное хранилище) из целого множества XML-файлов. Затем скопируйте поверх модели данных + базы данных и связанных с ними файлов .m/.h, в фактическое приложение, которое в основном будет просто читать эту базу данных. Итак, однажды на самом устройстве, я просто работаю во втором приложении. Имеет ли это смысл? Спасибо за помощь! – rhess

0

Действительно ли это два разных проекта, или это две цели в одном проекте? Это, по-видимому, имеет гораздо больший смысл, а затем вы можете делиться объектами сущностей по мере их изменения.

+0

В настоящее время я действительно имею их как 2 разных проекта. один из них - «создатель хранилища данных», который загружает объекты из XML в постоянный магазин SQLite, а другой - в фактическое приложение. – rhess

0

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

Смежные вопросы