Базовые данные: генерация уникального идентификационного номера - PullRequest
0 голосов
/ 10 ноября 2009

У меня есть окно, которое выглядит так: UI

Каждый раз, когда добавляется запись, я хочу, чтобы для идентификатора восстановления был установлен уникальный номер, который еще не использовался в таблице. например если есть номера ID 1,2,3, тогда, когда я нажимаю +, поле ID должно быть установлено на «4». Кроме того, если одна из записей в таблице удалена, так что идентификационные номера: 1,2,4, тогда, когда я нажимаю +, номер в идентификаторе записи должен быть установлен на 3.

На данный момент у меня есть собственный класс ManagedObject, где я объявляю:

-(void)awakeFromInsert {
    [self setValue:[NSDate date] forKey:@"date"];
}

Для установки даты на сегодняшнюю дату.

Как мне реализовать этот уникальный идентификатор записи?

Спасибо!

Ответы [ 4 ]

2 голосов
/ 10 ноября 2009

Для чистого автоинкрементного идентификатора (как было запрошено в в этом вопросе ), что-то похожее на то, что описано в в этом сообщении , может выполнить эту работу. К сожалению, это не даст значения, которые заполняют пробелы для удаленных элементов в вашем списке.

1 голос
/ 10 июня 2011

Если вы используете контроллер массива в своем интерфейсе, вы можете использовать метод count в массиве selectedObjects для создания своего идентификатора. Вы можете реализовать, переопределив ваш метод - (id) newObject

//implemented in yourArrayController.m

-(id)newObject
{
//call the super method to return an object of the entity for the array controller
NSManagedObject* yourNewObject = [super newObject]; 

//set the ID the count of the arrangedObjects array
NSNumber* theID = [NSNumber numberWithInteger:[[self arrangedObjects] count]];

[yourNewObject setValue:theID forKey:@"ID"];

//return your new Object 
return yourNewObject;
}
1 голос
/ 10 ноября 2009

Для небольшого количества записей просто просматривайте их, пока не найдете бесплатный идентификатор. Псевдокод здесь, так как я не знаю ваш язык:

int RepairID=1;
While isUsed(RepairID) {
    RepairID=RepairID+1;
}
return RepairID;

Для большого числа записей вы можете отслеживать список удаленных идентификаторов: s и самый высокий идентификатор. При добавлении записи выберите наименьший удаленный идентификатор или, если для повторного использования не осталось удаленных идентификаторов, используйте самый высокий идентификатор + 1

1 голос
/ 10 ноября 2009

Ранее я использовал числовую форму даты (с быстрой проверкой, чтобы убедиться, что она действительно уникальна - т.е. часы не были настроены). + [NSDate timeIntervalSinceReferenceDate] возвращает NSTimeInterval (который является typedef double). Я считаю, что это не зависит от часовых поясов, "летнего времени" и т. Д.

Единственная слабость, как я упоминал ранее, это настройка часов, но вы всегда можете убедиться, что они уникальны. Если у вас больше требований, чем указано в списке, дайте мне знать. У меня их немного, и то, что я считаю достаточным обходным путем.

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