如何在Realm中设置自动增量键?

对于每个ChatData对象,我都有一个唯一的msgid。

@interface ChatData : RLMObject
@property NSInteger msgid;
....
@end

但是,每次创建新对象时,我都必须查询所有对象并获取最后一个msgid。

RLMArray *all = [[ChatData allObjects] arraySortedByProperty:@"msgid" ascending:YES];
ChatData *last = [all lastObject];
ChatData *newData = [[ChataData alloc]init];
newData.msgid = last.msgid+1;

是否有一种有效的方法来替代此实现?

jpsim

Realm没有自动递增行为,因此您需要自己进行管理。我鼓励您问一个关于数据的问题:

是否需要有连续的,连续的整数ID?

如果不是,那么唯一的字符串主键可能就足够了。然后,您可以使用类似的方法[[NSUUID UUID] UUIDString]来生成唯一的字符串ID。这样做的好处是,即使在多线程方案中,也可以保证这些UUID或多或少是唯一的。

如果是这样,将最后一个数字始终保留在内存中可能会更有效,这样就不必在每次生成新ID时都进行查询。如果可能在多个线程中创建对象,请确保使nextPrimaryKey()函数具有线程安全性,否则它可能会生成两次相同的数字(或更多!)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章