Как сказал Барри Уорк, всегда помните, что Core Data не является ормом. Чистая информация SQL не предоставляется пользователю, и каждая строка является всего лишь объектом. Кстати, когда-нибудь вам нужно будет получить доступ к «первичному ключу», например, когда вам нужно синхронизировать db-серверы с внешними базами данных sql (в моем случае мне это понадобилось в функции обратного вызова, чтобы изменить состояние объекта после INSERT это с успехом в удаленной db). В этом случае, вы можете использовать:
objectId=[[[myCoredataObject objectID] URIRepresentation] absoluteString]
, который возвращает строку, как: х-CoreData: // 76BA122F-0BF5-4D9D-AE3F-BD321271B004/Объект/P521, который является уникальным идентификатором, используемым для CoreData идентифицировать этот объект.
Если вы хотите получить обратно объект с этим уникальным идентификатором:
NSManagedObject *managedObject= [managedObjectContext objectWithID:[persistentStoreCoordinator managedObjectIDForURIRepresentation:[NSURL URLWithString:objectId]]];
NB: Помните, что если приемник не был сохранен в контексте CoreData, ИД объекта является временным значением, которое будет при сохранении объекта.
Хотел бы я дать вам еще один плюс для «Core Data - это не база данных». – Abizern
Существуют распространенные случаи, когда вам нужно захватить объект по его идентификационным данным - передача данных из ячейки ячейки таблицы в контроллер подробного представления. Вы можете просто передать объект сам, но часто вы не хотите этого делать, если вы используете другой контекст в деталях VC. – memmons
@ Майкл: Точно. Какова наилучшая практика для этого? – Noah