如何向领域添加自动增量值

时间:2017-07-08 13:47:57

标签: ios objective-c realm primary-key

我最近从核心数据迁移到了领域。在核心数据中,我为每个插入的记录自动增加pk。

在这个领域我找不到自动增量这样的东西。

目前我正在使用uuid作为pk。

+(NSString *)primaryKey{
    return @"uuid";
}

我仍然需要引用旧的pk,所以我在领域添加了一个新的字段oldPK,所以我可以用它来引用其他的sqlite表。这不是一个长期的解决方案。我正在寻找短期解决方案,直到我完全从sqlite迁移到Realm。

现在我的方法是从db中的现有oldPk值中获取最大值,并为新添加的记录增加它。

有没有更好的向Realm模型添加自动增量?

1 个答案:

答案 0 :(得分:1)

Realm没有任何自动增量主键。您应该为每条记录设置它。您可以为每条记录使用唯一的主键:

[NSUUID UUID].UUIDString; 

或者如果要连续创建主键,可以查询所有记录,按主键对其进行排序,获取最新记录的主键,增加它并将其用作新记录的主键:

RLMResults<YourRecordClass *> *records = [[YourRecordClass allObjects] sortedResultsUsingKeyPath:@"uuid" ascending:YES];
NSInteger newPrimaryKey = [records lastObject].uuid + 1;
YourRecordClass *newRecord = [[YourRecordClass alloc] init];
newRecord.uuid = newPrimaryKey;

RLMRealm *realm = [RLMRealm defaultRealm];
[realm beginWriteTransaction];
[realm addObject:author];
[realm commitWriteTransaction];