Пользовательский тип данных UID для CoreData - PullRequest
0 голосов
/ 29 августа 2009

Документация CoreData гласит: «Иногда вы можете извлечь выгоду из создания своего собственного уникального свойства (UUID), которое может быть определено и установлено для вновь вставленных объектов. Это позволяет эффективно находить определенные объекты с помощью предикатов (хотя до операции сохранения нового объекты могут быть найдены только в их первоначальном контексте). "

Что следует использовать для этого типа?

Идентификатор объекта управляемого объекта обычно имеет тип «NSManagedObjectID», но инструмент мастера DataModel через XCode, позволяющий установить тип для данного атрибута, имеет только основные разрешенные типы в дополнение к «Не определено», «Двоичные данные» и «Трансформируемое».

Если бы я хотел иметь атрибут, который служит в качестве вторичного идентификатора для объекта (в дополнение к его стандартному ObjectID), сохраните ли вы его как NSString или измените пользовательскую модель объекта так, чтобы она содержала NSManagedObjectID?

(для приложения для iPhone / разработки CoreData)

1 Ответ

1 голос
/ 29 августа 2009

NSString или целочисленный атрибут - это логический выбор, хотя вы можете использовать трансформируемый атрибут для хранения всего, что вам нужно (что, конечно, может быть соответствующим образом сериализовано). Инкрементное целое число, вероятно, достаточно хорошо для многих применений, но каждый вариант использования отличается. В сети существует множество алгоритмов для генерации UUID строк или байтовых массивов (начнем с Google). NSString UUID довольно прост:

+(NSString*)UUIDString {
    CFUUIDRef theUUID = CFUUIDCreate(NULL);
    CFStringRef string = CFUUIDCreateString(NULL, theUUID);
    CFRelease(theUUID);
    return [NSMakeCollectable(string) autorelease];
}

для массива байтов, посмотрите на CFUUIDGetUUIDBytes().

Прежде чем идти по этому пути, подумайте долго и усердно о том, нужно ли это. Люди с точки зрения SQL «хотят» свои идентификаторы, но Core Data не относится к реляционным базам данных. Это инфраструктура управления графами объектов, которая использует SQLite в качестве одной из базовых реализаций. Если вы пытаетесь делать что-то похожее на SQL в Core Data, вы будете бороться с фреймворком. Часто требуется правильное использование отдельного свойства id для правильного использования платформы Core Data.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...