每次添加记录时,我都希望将修复ID设置为尚未在表中使用的唯一编号。例如如果有ID号1,2,3,那么当我按+时,ID字段应设置为'4'。 此外,如果删除表中的一个记录,以便ID号为:1,2,4,那么当我按+时,记录ID中的数字应设置为3.
目前,我有一个自定义的ManagedObject类,我在其中声明:
-(void)awakeFromInsert {
[self setValue:[NSDate date] forKey:@"date"];
}
为了将日期设置为今天的日期。
我将如何实施此唯一记录ID?
谢谢!
答案 0 :(得分:2)
对于纯粹的自动增量ID(如this question中所要求的那样),类似于this message中描述的内容可能会起作用。不幸的是,这不会提供填充列表中已删除项目空白的值。
答案 1 :(得分:1)
我使用了之前日期的数字形式(快速检查以确保它实际上是唯一的 - 即时钟尚未调整)。 + [NSDate timeIntervalSinceReferenceDate]返回NSTimeInterval(这是一个typedef double)。我认为这与时区,“夏令时”等无关。
正如我之前提到的,唯一的弱点是时钟正在调整,但你总能确保它是独一无二的。如果您的要求多于您列出的要求,请与我们联系。我自己也有一些,我相信这是足够的解决办法。
答案 2 :(得分:1)
对于少量记录,只需循环浏览它们,直到找到一个免费ID。这里是伪代码,因为我不懂你的语言:
int RepairID=1;
While isUsed(RepairID) {
RepairID=RepairID+1;
}
return RepairID;
对于大量记录,您可以跟踪已删除ID的列表:s和最高ID。添加记录时选择最小的已删除ID,或者如果没有删除的ID可以重复使用,请使用最高ID + 1
答案 3 :(得分:1)
如果在界面中使用Array Controller,则可以在arrangeObjects数组上使用count方法来创建ID。您可以通过覆盖 - (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;
}