我有一个iOS应用程序(swift 3)的实时(工作)版本,它使用Realm Swift(2.4.2)进行存储和离线使用。我使用简单的表作为具有主键的结构,并且(根本)没有任何关系。一切都很完美,直到我意识到调用下面的片段::
entities = fetch from web...... // pseudo
let realm = try Realm()
try realm.write {
realm.add(entities, update: true)
}
主键声明::
override static func primaryKey() -> String? {
return "ID"
}
其中" ID"是班级'根据领域文档的主键属性。
无论如何作为一种解决方法,我在更新::
之前整个表(删除)entities = fetch from web...... // pseudo
let realm = try Realm()
let storedObjects = realm.objects(Entity.self)
try realm.write {
realm.delete(storedObjects) // nuke entities
realm.add(entities)
}
但我很确定必须有一个更好的方法。
我'我们在过去的StackOverflow中找到了类似的线程,但提出的解决方案与我自己的解决方案非常相似。这不是我所做的。我正在寻找...
答案 0 :(得分:0)
您可以向您的领域添加新属性,如
dynamic var lastUpdate: Double
或类似的东西。
然后你可以做
let currentMs = NSDate().timeIntervalSince1970
for entity in entities {
entity.lastUpdate = currentMs
}
realm.add(entities, update: true)
let oldObjects= realm.objects(Entity.self).filter("lastUpdate < \(currentMs)")
realm.delete(oldObjects)
有了这个解决方案,你就不必去做&#34; nuke&#34;所有实体。但我认为它在性能方面要好得多