有时我的应用会立刻添加许多Realm记录。
我需要能够始终保持相同的顺序。
The documentation recommends that I use NSDate
:
自动递增属性的另一个常见动机是保留插入顺序。在某些情况下,这可以通过将对象附加到List或使用具有默认值NSDate()的createdAt属性来完成。
但是,由于有时会快速添加记录,因此日期并不总是唯一的,特别是考虑到Realm仅将NSDate
存储到第二准确度。
关于文档中的建议,我有什么遗漏吗?
也许文档没有考虑快速连续添加的记录?
如果是这样,是否会建议保留Int
position
属性并始终在添加新记录时查询最后一条记录,以确保顺序位置?
但是,查询在这种情况下的最后记录将不会返回先前的记录,除非您还添加并最终确定了一个写入,如果您需要添加大量记录,这将是浪费。
那么,它将需要批量创建逻辑,这是不幸的。
答案 0 :(得分:2)
但是,由于有时候记录添加得如此之快,因此日期并不总是唯一的,特别是考虑到Realm只将NSDate存储到第二精度。
日期精度的限制在Realm v0.101中得到了解决。 Realm现在可以表示精度高于NSDate
的日期。
但是,在这种情况下查询最后一条记录不会返回之前的记录,除非您还添加并完成了一次写入,如果您需要添加大量记录,这将是浪费。 / p>
没有必要为同一个线程上的查询提交写入事务,以查看您在写入事务期间添加的数据。
我是否对文档中的建议缺少了什么?
您跳过了第一个建议:将对象追加到List
。 Realm中的列表本身就是有序的,因此您无需找到创建唯一有序值的方法。只需将新对象附加到列表中,并依赖列表的顺序来确定添加对象的顺序。这也具有使用Realm Mobile Platform同步功能时安全的优点,因为递增字段可以在不同设备上生成重复项,并且时间戳可能不可靠。