Как сгруппировать методы, принадлежащие одному объекту, в один файл класса в Core Data, как в Entity Framework? - PullRequest
2 голосов
/ 05 июня 2010

Как сгруппировать методы, принадлежащие одному объекту, в один файл класса в Core Data, например Entity Framework?

В Linq мы можем поместить все методы в класс объекта домена и повторно использовать их в Core Data. Есть ли способ создать разные классы для разных объектов? Или мы можем использовать только предикат для извлечения?

Кажется, я не могу определить класс для каждой сущности, которую я настроил в модели данных. И это не похоже на спящий режим, когда я могу управлять физической схемой базы данных через ORM. Поправьте меня, если я ошибаюсь, я не верю, что Core Data может сделать это, насколько я знаю.

Так в чем же преимущество использования Core Data? И есть ли какой-нибудь механизм на Какао, который я могу определить мои классы объектов домена, включая первичный ключ, например, внешний ключ, и затем создать схему базы данных?

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

Ответы [ 2 ]

3 голосов
/ 08 июня 2010

В вашей базовой модели данных вы можете определить, какой класс для создания экземпляров ваших сущностей:

альтернативный текст http://img404.imageshack.us/img404/3368/setclass.png

Когда Core Data выбирает объекты из хранилища, он пытается создать их как экземпляры этого класса (хотя это не так просто, Core Data выполняет некоторые приемы).

Вы можете автоматически создавать файлы классов для ваших сущностей, открыв базовую модель данных в новом окне и выбрав Файл-> Новый файл:

альтернативный текст http://img241.imageshack.us/img241/8238/newfile.png

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

альтернативный текст http://img46.imageshack.us/img46/348/managedobjectclass.png

Выберите это и выберите объекты, для которых создаются классы:

альтернативный текст http://img241.imageshack.us/img241/5030/selectentity.png

Будет создан класс с различными свойствами для получения / установки атрибутов вашей сущности:

альтернативный текст http://img10.imageshack.us/img10/9868/generatedproperties.png

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

Итак, создайте категорию под названием «Человек + дополнения» или любое другое имя, которое вы считаете подходящим:

альтернативный текст http://img294.imageshack.us/img294/8871/addcategory.png

И добавьте любые новые методы или свойства в этот класс:

альтернативный текст http://img717.imageshack.us/img717/3884/addmethods.png

Обратите внимание, что вы не можете добавлять новые переменные экземпляра, но NSManagedObject имеет средства для получения / установки значений во внутреннем словаре. См. NSManagedObject документацию

Так что, как только вы все это сделаете, все, что вы делаете - это преобразуете NSManagedObject, который вы получаете из запроса на выборку (или где-либо еще), в соответствующий тип:

#import "Person+Additions.h"

//...

Person *p = (Person *) [fetchResult objectAtIndex:0];
[p myCustomMethod];

//...

Что касается других ваших вопросов о первичных ключах и взаимодействии с физической базой данных, это не совсем то, что Core Data предназначена для того, чтобы предоставить вам. Вы не должны слишком много думать о базовой базе данных. Базовые данные предназначены для более высокого уровня, чем это. Вы определяете свою модель и выбираете объекты через API. Первичные ключи и другие подробности "database-y", подобные этой, не предоставляются.

Если вы хотите получить полный контроль над базой данных, вам следует использовать API sqlite. Но я бы сказал, что для большинства приложений Core Data - лучший выбор.

0 голосов
/ 05 июня 2010

Посмотрите документы для KVC ("key-value-coding") . Вы используете ключевые пути для получения значений, которые вы хотите. Вы также можете отсортировать данные в массиве, используя ключевой путь. Для этого взгляните на NSSortDescriptors . В противном случае, да, просто измените свой NSP-предикат и повторите выборку.

...