2016-08-09 4 views
0

Я узнал, что Core Data - это в основном база данных SQLite. Каждый объект представляет собой отдельную таблицу. Существуют также таблицы, которые не являются объектами, включая Z_METADATA, Z_MODELCACHE и Z_PRIMARYKEY. Я не знаю, что они делают.Как я могу получить значение первичного ключа NSManagedObject?

В любом случае, я видел, что поля «сущностей» примерно такие же, как те свойства, которые я добавил в модели данных, плюс несколько дополнительных функций. Например, если мой объект имеет только одно свойство, которое называется date. Таблица будет иметь поле ZDATE, а также Z_PK, Z_ENT и Z_OPT.

По-видимому, каждый объект имеет первичный ключ, который хранится в поле Z_PK! Я хочу получить значение этого первичного ключа определенного NSManagedObject. И я хочу запросить базу данных для NSManagedObject, которая имеет определенный первичный ключ.

Так в основном, что-то вроде этого:

let pk = myManagedObject.primaryKey 
// the below should return myManagedObject 
managedObjContext.objectWithPrimaryKey(someEntityDescription, pk) 

Я искал документацию для NSManagedObject и увидел objectID. Но я не думаю, что это так, или нет?

+1

Я считаю, что вы имеете в виду Идентификатор объекта, когда вы говорите первичный ключ. Отметьте http://stackoverflow.com/questions/901640/core-data-primary-key –

ответ

1

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

Примерный эквивалент основных данных вашего фрагмента кода будет что-то вроде (используя Swift 3 синтаксис):

let objectID = myManagedObject.objectID 

// Later 
let myManagedObject = context.object(with: objectID) 
// Or... 
let myManagedObject = context.existingObject(with: objectID) 

Использование object(with:) быстрее, но потенциально менее безопасно. Использование existingObject(with:) может быть немного медленнее, но безопаснее.

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