Я не совсем уверен, что идентификатор делает в вашем приложении, но мое первое наблюдение состоит в том, что все сущности в вашей модели данных имеют как имя, так и идентификатор, поэтому они, вероятно, должны иметь абстрактную супер-сущность для хранения.имя и идентификаторКроме этого, вы можете получить максимальный идентификатор в наборе, подобном этому:
Category *cat = /* get a category */;
NSSet *parts = cat.parts;
NSNumber *maxID = [parts valueForKeyPath:@"@max.id"];
для идентификаторов категории, вы можете выполнить запрос выборки для всех категорий, а затем использовать эту технику для массива, которыйвозвращаетсяЯ не знаю, хотите ли вы сохранить идентификаторы каждого объекта модели уникальными или хотите, чтобы идентификаторы начинались с 0 для первого объекта, добавленного к каждой сущности.
Чтобы убедиться, что поле уникально, вы можете использоватьпроверка управляемого объекта.это описано в Руководстве по программированию основных данных и более подробно в Руководстве по реализации объекта модели.Чтобы убедиться, что имя уникально, вам нужно проверить его на соответствие всем именам в validateName: error: метод.создание абстрактной супер сущности сделает это намного проще.Для этого вы получаете все имена объектов в абстрактной супер сущности и проверяете их по значению, которое нужно проверить.
Редактировать: если вы используете абстрактную супер сущность, вы должны получить максимальный идентификатор объектовв абстрактной супер сущности, если вы хотите, чтобы они были уникальными.Также, как кто-то еще указал, objectID управляемого объекта является уникальным идентификатором для него, который всегда будет одинаковым, но, глядя на приложение, я не думаю, что это действительно то, что вам нужно, потому что это будут номера компьютеров, а неболее дружественные результаты увеличения максимального идентификатора при создании нового объекта.Еще одна вещь, вы должны установить идентификатор объекта в awakeFromInsert, чтобы он вызывался только при создании объекта.