2010-06-16 3 views
2

Итак, у меня есть .xcdatamodel с около дюжиной сущностей, определенных и связанных друг с другом, с атрибутами и т. Д. До сих пор я пытался использовать это в графическом интерфейсе, используя NSTableViews для отображения/ввода данных и NSArrayControllers, которые я создаю для каждого объекта. Все это отлично работает. Все они привязаны к контексту управляемого объекта приложения (MOC)Основные данные, контекст управляемых объектов, NSArrayController .. выпрямите меня немного

Но теперь я пытаюсь программно получить доступ к данным в этих массивах, и я нахожу это тупым для этого. После большого чтения это выглядит так, как я должен ДЕЙСТВИТЕЛЬНО сделать, это перейти к MOC для получения данных для данного объекта. Я еще не справился с этим, но все в порядке.

То, что я не понимаю, заключается в том, как использовать базовые данные, когда я НЕ вхожу через NSTableView и т. Д., И НЕ использует NSArrayControllers. Например, если я хотел полностью обработать некоторые из моих .xcdatamodel Entities в пакетах Model моего проекта (которые не касаются GUI). Нужно ли мне все-таки создавать NSArrayController, чтобы я мог «подготовить контент» к Entity и управлять им и инициализировать, и все это? Или есть другой способ, которым я могу напрямую связать MOC и добавить/удалить/получить данные для данного объекта?

То, что я хочу сказать, что я действительно непонятно, как работать с вещами, если я не делаю простой случай View < -> NSArrayController, а затем Model < -> MOC

ответ

2

Вы должны принять посмотрите на NSFetchRequest и метод executeFetchRequest:error: на NSManagedObjectContext.

Доступ к данным через контроллер массива может быть сложным. Я обнаружил, что контроллеры массивов, как правило, предназначены для использования с элементами пользовательского интерфейса. Есть несколько трюков, которые контроллер массива будет использовать, чтобы поддерживать UI мгновенно. Например, он будет получать элементы в фоновом потоке. Большая часть этого может быть настроена, но вам будет лучше получать доступ к информации, которая делает вашу собственную выборку.

2

NSArrayController и связанные с ним классы предназначены для использования в качестве контрольных контроллеров MVC на полке. Таким образом, их единственной реальной функцией является привязка пользовательского интерфейса к модели данных. Если вам нужно иметь дело с моделью в противном случае, вы обычно делаете это программно.

Чтобы получить доступ к модели программно, вы обычно начинаете с запроса выборки (NSFetchRequest), чтобы найти соответствующие экземпляры определенных объектов. Затем вы будете обращаться к отношениям сущности, чтобы найти все другие экземпляры объектов, связанных с выбранными объектами.

Например: предположим, что у вас есть приложение типа расписания. У вас есть дни и события. Каждый день имеет несколько событий, но каждое событие имеет только один день.

Если вы хотите проверить события в течение недели, вы получите объекты дня, чей атрибут даты находится в 7-дневном диапазоне. Затем вы будете спрашивать каждый день объект в свою очередь о связанных событиях.

iOS пока не поддерживает привязку, поэтому ознакомьтесь с ресурсами для использования Core Data там, чтобы узнать, как управлять всем этим вручную.

+0

Этот и другой ответ оставил оба ответа о моих запросах Fetch. Однако остается вопрос: что мне делать, чтобы эти данные «были созданы». Например, у меня есть сущности дней и событий. Как мое приложение знает, что они должны проводиться в определенном MOC? Как заполнить MOC новыми объектами этих типов? Собираюсь ли я получить такие вещи, как обратные отношения, созданные бесплатно? К счастью, я не занимаюсь разработкой iOS, так что сложность может быть проигнорирована – Nektarios

+1

Вы говорите, что ничего не знаете о Core Data, кроме как привязываться к предоставленным контроллерам? Если это так, я бы рекомендовал запустить Руководство по программированию основных данных в документах Apple. Если вы не используете пользовательский интерфейс, вы не получаете много материала бесплатно. Программный доступ требует, ну, программирования и всех деталей. – TechZen

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