2013-02-24 4 views
0

Я не нашел явного «нет» в документации/обсуждении, но подозреваю, что невозможно создавать объекты CoreData программно, во время выполнения.Как динамически генерировать объекты CoreData

То, что я хочу сделать, аналогично выполнению команд DDL (например, «Создать таблицу», «Таблицу сбрасывания» и т. Д.) Из внутреннего кода запуска, потому что я не знаю, пока не спрошу у пользователя, сколько столбцов его таблицы или какие типы данных они должны быть. Возможно, ему нужно несколько таблиц.

Кто-нибудь знает, возможно ли это? Почитал бы указатель на что-то читать. (Также хотел бы узнать об отрицательном значении, поэтому я могу перестать задаваться вопросом.)

Если это невозможно сделать в CoreData, было бы это причиной для переключения на SQLite?

+3

Вы можете создать Core Data «управляемый объект модель "и" описания сущностей "во время выполнения (см. http://stackoverflow.com/a/13744302/1187415). Но обратите внимание, что Core Data является «диспетчером графа объектов», а не базой данных (см., Например, http://www.cocoawithlove.com/2010/02/differences-between-core-data-and.html). Поэтому с Core Data вы должны думать об объектах и ​​их атрибутах и ​​отношениях, а не о таблицах. –

+0

Я отлично согласен с @MartinR;) –

+0

Большое спасибо. Я изучу ссылку. Я также столкнулся с http://stackoverflow.com/questions/6379025/customize-core-data-model-at-runtime/6379098#6379098 только сейчас, который, кажется, находится в одной и той же области (это было слишком поздно , извините :-)) – user2037606

ответ

4

Вы можете создать всю модель Core Data во время выполнения - нет необходимости использовать модель данных данных Xcode вообще, и есть поддержка API для создания и настройки каждой детали модели. Но это, вероятно, не так гибко, как кажется. Хотя вы можете создавать новые описания сущностей или изменять существующие, вы можете сделать это только до, загружая файл хранилища данных. Когда вы читаете и записываете данные, вы должны считать модель данных фиксированной. Изменение его в этой точке приведет к возникновению исключения.

Это не совсем то же самое, что и обычное использование SQLite. Это похоже на то, что таблицы SQLite определены в одном поле и данные хранятся в другом файле - и вы можете изменять таблицы «на лету», но только до загрузки фактических данных. (Я знаю, что это не то, как работает SQLite, но это в основном подход, который обеспечивает Core Data).

Если вы планируете изменить свою модель/схему, как вы описали, вам, вероятно, будет лучше идти с прямым доступом к SQLite. Есть несколько Objective-C SQLite оберток, которые позволяют подход ObjC стиле, поддерживая при этом доступ к SQLite стиле:

+0

Спасибо, это очень полезно. Я предполагаю, что то, что я пытаюсь реализовать, можно охарактеризовать как графический интерфейс базы данных , для людей, у которых нет (и они не нужны). Ваш ответ подтверждает мое впечатление. Еще раз спасибо. – user2037606

+0

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

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