В вашей базовой модели данных вы можете определить, какой класс для создания экземпляров ваших сущностей:
альтернативный текст 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 - лучший выбор.