我最近从核心数据迁移到了领域。在核心数据中,我为每个插入的记录自动增加pk。
在这个领域我找不到自动增量这样的东西。
目前我正在使用uuid作为pk。
+(NSString *)primaryKey{
return @"uuid";
}
我仍然需要引用旧的pk,所以我在领域添加了一个新的字段oldPK,所以我可以用它来引用其他的sqlite表。这不是一个长期的解决方案。我正在寻找短期解决方案,直到我完全从sqlite迁移到Realm。
现在我的方法是从db中的现有oldPk值中获取最大值,并为新添加的记录增加它。
有没有更好的向Realm模型添加自动增量?
答案 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];