Как создать сущность динамически в Objective-C?
Я создаю приложение для iPad, где мне нужно, чтобы пользователь создавал сущность динамически. У меня уже есть 3 сущности, которые использует программа.
Не могли бы вы помочь мне с кодом, как это сделать?
Я хочу понять всю структуру в соответствии с моим пониманием я должен создать новую managedObjectModel, добавить новые сущности и затем объединить ее с существующей, правильно?
2 ответа:
Хотя на практике можно создать новую сущность и новую модель на лету, это чрезвычайно сложно. В противном случае вам придется перенести все существующие сохраненные данные в новую модель и новый файл постоянного хранилища. Я настоятельно рекомендую не делать этого, особенно если вы только начинаете работать с основными данными.
У вас есть варианты:
Во-первых, вы уверены, что вам действительно нужна новая сущность? Люди, только начинающие работать с основными данными, часто ошибаются в сущностях для управляемых объектов. Сущности относятся к управляемым объектам так же, как классы-к экземплярам. Сущности-это абстракции, используемые для создания графа объектов. На самом деле они не содержат данных. Времена, когда вам нужны новые сущности, очень и очень редки. Во-вторых, если вам действительно нужна какая-то динамическая сущность, обычно лучше всего разложить динамическую сущность на множество фиксированных субстанций, а затем использовать отношения для создания виртуальной сущности. Например, вам нужна динамическая личность "сущность", поэтому вы создаете несколько сущностей в модели, каждая из которых содержит один атрибут человека. У вас может быть сущностьField
, которая будет иметь атрибутfieldName
, а затем атрибутfieldValue
. Тогда есть фактическая сущностьPerson
, которая не имеет атрибутов, а только отношения к необходимым объектамField
. Вы можете добавить любые поля, необходимые для любого человека, а затем воссоздать объект виртуального человека, пройдя по связям с его полями. Однако я сильно сомневаюсь, что вам нужна такая гибкость. Такая потребность встречается очень редко. Я бы отступил назад и посмотрел, какие именно динамические данные, по вашему мнению, может потребоваться ввести пользователю.
Правильно - вы создадите массив объектов NSEntityDescription, а затем вызовете
Но обратите внимание, что вы не можете изменить модель после того, как она была использована для создания контекста управляемого объекта (или использована для хранения). Вам нужно будет создать новое хранилище и контекст После изменения модели.setEntities:
для новой модели управляемых объектов. Затем, наконец, вы бы объединили эту модель с вашей встроенной моделью.