У меня есть этот код:
NSEntityDescription *userEntity = [[[engine managedObjectModel] entitiesByName] objectForKey:@"User"];
User *user = [[User alloc] initWithEntity:userEntity insertIntoManagedObjectContext:[engine managedObjectContext]];
и я хочу знать идентификатор объекта, вставленного в контекст управляемого объекта. Как я могу получить это?
Будет тот идентификатор оставаться тем же в течение времени жизни того объекта, или будет это сохраняться к sqlLite базе данных под этим и быть чем-то, что может использоваться для однозначного определения его во время операции выборки (моя конечная цель).
Любая справка, ценившая//:)
Прочтите об «идентификаторах управляемых объектов» в Руководстве по программированию основных данных
Вы можете получить идентификатор объекта из объекта примерно так:
NSManagedObjectID *moID = [managedObject objectID];
Во-первых, вы создаете свои объекты нежелательным образом. Обычно следует:
User *user = [NSEntityDescription insertEntityForName:@"User" intoManagedObjectContext:[engine managedObjectContext]];
Во-вторых, когда вы создаете объект, он получает временный идентификатор, к которому вы можете получить доступ через [user objectID], как упомянул Дэвид. Как только вы сохраните контекст, он получит новый "постоянный" id.
Однако этот id может измениться за время жизни объекта (но не экземпляра). Такие вещи, как миграция данных, могут привести к изменению этого идентификатора. Однако между сохранением контекста и выходом из приложения идентификатор останется прежним.