Как получить идентификатор объекта, сохраненного к контексту управляемого объекта Базовых Данных?

У меня есть этот код:

NSEntityDescription *userEntity = [[[engine managedObjectModel] entitiesByName] objectForKey:@"User"];
User *user = [[User alloc] initWithEntity:userEntity insertIntoManagedObjectContext:[engine managedObjectContext]];

и я хочу знать идентификатор объекта, вставленного в контекст управляемого объекта. Как я могу получить это?

Будет тот идентификатор оставаться тем же в течение времени жизни того объекта, или будет это сохраняться к sqlLite базе данных под этим и быть чем-то, что может использоваться для однозначного определения его во время операции выборки (моя конечная цель).

Любая справка, ценившая//:)

5
задан Spanky 15 July 2010 в 00:44
поделиться

2 ответа

Прочтите об «идентификаторах управляемых объектов» в Руководстве по программированию основных данных

Вы можете получить идентификатор объекта из объекта примерно так:

NSManagedObjectID *moID = [managedObject objectID];
2
ответ дан 18 December 2019 в 16:34
поделиться

Во-первых, вы создаете свои объекты нежелательным образом. Обычно следует:

User *user = [NSEntityDescription insertEntityForName:@"User" intoManagedObjectContext:[engine managedObjectContext]];

Во-вторых, когда вы создаете объект, он получает временный идентификатор, к которому вы можете получить доступ через [user objectID], как упомянул Дэвид. Как только вы сохраните контекст, он получит новый "постоянный" id.

Однако этот id может измениться за время жизни объекта (но не экземпляра). Такие вещи, как миграция данных, могут привести к изменению этого идентификатора. Однако между сохранением контекста и выходом из приложения идентификатор останется прежним.

0
ответ дан 18 December 2019 в 16:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: