Базовые данные: создание «корневого объекта» в приложении на основе документа - PullRequest
0 голосов
/ 21 апреля 2011

Я создаю проект на основе документа с использованием Core Data и столкнулся с тем, что может быть просто концептуальным вопросом для меня, поскольку, хотя я не новичок в Cocoa, это моя первая попытка использовать Core Data.То, что я пытаюсь выполнить, должно быть относительно простым: при каждом запуске нового документа я хотел бы создать новый экземпляр одного из моих объектов модели, который будет служить «корневым» объектом.

Что я сделал, так этодобавьте NSObjectController в мою xib, установите для его режима значение Entity Name (с указанием правильного имени объекта), отметьте флажок «Prepare Content» и свяжите его контекст управляемого объекта с владельцем файла с managedObjectContext в качестве пути ключа модели.Чтобы проверить это, я привязал заголовок моего главного окна к контроллеру объекта, с ключом контроллера в качестве выбора и путем к ключу модели в качестве одного из ключей в моей сущности.

Я знаю, что могу создать свой корневой объект программно, но я пытаюсь принять шаблон посредника, как это рекомендовано Apple.Я видел инструкции из учебного пособия для сотрудников отдела в разделе «Принятие шаблона посредника», и подробные шаги - это именно то, что, я считаю, я сделал.

Есть мысли?

Редактировать:Возможно, я не правильно сформулировал проблему.Модели создаются в Базовых данных, и отношения устанавливаются так, как мне нужно (с «корнем», потомками и листьями, использованием отношений «один-один родитель», отношениями «многие-дети» и логическим атрибутом isLeaf).Моя проблема заключается в том, чтобы этот корневой объект создавался как одиночный объект при каждом запуске нового документа.Должно быть точно отношение 1: 1 между корневым объектом и текущим документом, этот корневой объект должен всегда существовать и быть доступен без какого-либо взаимодействия с пользователем для его создания, а дочерние узлы, которые создаются и присоединяются к корню, являются объектами данных.которые используются и манипулируются приложением.

Я реализовал вышеуказанную функциональность программно, но в соответствии с принципами Core Data, хотел бы полностью принять шаблон посредника и не управлять каким-либо созданием объектов данных в моем приложениилогика.

1 Ответ

0 голосов
/ 21 апреля 2011

Если вам нужен «корневой» управляемый объект, который вы могли бы найти в связанном списке или дереве, то вы должны настроить его в самой модели данных.

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

Иерархия управляемых объектов нуждается в древовидной структуре, подобной этой:

Tree{
    nodeName:string
    parent<-->>Tree.children
    children<<-->Tree.parent
}

... так, чтобы «корневой» объект был единственным Tree экземплярами, которые имеют parent==nil.

Сказав все это, я хотел бы отметить, что в документах Apple, на которые вы ссылаетесь, сказано, что лучше всего НЕ использовать этот тип встроенной иерархии длябольшинство случаев.Это просто упрощение, используемое для демонстрации (и я думаю, что оно плохое).

Модель данных предназначена для моделирования / симуляции реальных объектов, условий или событий, с которыми имеет дело приложение.Таким образом, логические отношения между сущностями / объектами в модели / графике должны отражать реальные отношения.В этом случае, если реальные вещи, которые вы моделируете, не существуют в иерархии с реальным «корневым» объектом, условием или событием, то ваша модель также не должна иметь их.

...