gpt4 book ai didi

ios - Realm 已填充但只有一个对象

转载 作者:搜寻专家 更新时间:2023-11-01 06:41:56 24 4
gpt4 key购买 nike

我第一次使用 Realm,是在 Swift 项目中使用它。我使用的是最新版本的 Realm 0.96.3。

我有两个 Realm 模型:JogMarker

class RealmCurrentRecJog: Object {

dynamic var id: Int = 0

dynamic var duration: Double = 0.0
let markers = List<RealmCurrentRecMarker>()

// Specify properties to ignore (Realm won't persist these)

override static func primaryKey() -> String? {
return "id"
}
}

class RealmCurrentRecMarker: Object {

dynamic var order: Int = 0

dynamic var latitude: Double = 0.0
dynamic var longitude: Double = 0.0

dynamic var speed: Double = 0.0
dynamic var accuracy: Double = 0.0
dynamic var altitude: Double = 0.0

dynamic var time: Double = 0.0
}

正如您在 Jog 模型中看到的那样,我得到了一个 <List>标记和 id是主键。在标记模型中没有什么疯狂的。

所以我用这个函数填充我的 Realm 模型:

private func fillDbWithMarker() {

let saveJog = RealmCurrentRecJog()
let saveMarker = RealmCurrentRecMarker()

let jogToSave = self.jogRecorder.getDraftJog()

saveJog.id = Int(jogToSave.id)
saveJog.duration = jogToSave.duration

saveMarker.order = Int((jogToSave.markers.last?.order)!)
saveMarker.longitude = (jogToSave.markers.last?.longitude)!
saveMarker.latitude = (jogToSave.markers.last?.latitude)!

saveMarker.accuracy = (jogToSave.markers.last?.accuracy)!
saveMarker.altitude = (jogToSave.markers.last?.altitude)!
saveMarker.speed = (jogToSave.markers.last?.speed)!
saveMarker.time = (jogToSave.markers.last?.time)!

do {
let realm = try Realm()
do {
try! realm.write {
saveJog.markers.append(saveMarker)
realm.add(saveJog, update: true)
}
}
} catch let error as NSError {
print(error)
}
}

最后,当我查看我的 Realm 浏览器时,结果是我只得到列表中的最后一个标记,即使我的标记表已满。我不明白我的错误在哪里。

RealmBrowser

编辑:这是让它工作的代码

do {
let realm = try Realm()
do {
try! realm.write {
saveJog = realm.objects(RealmCurrentRecJog).last!
saveJog.markers.append(saveMarker)
realm.add(saveJog, update: true)
}
}
} catch let error as NSError {
print(error)
}

最佳答案

fillDbWithMarker 创建一个 Jog,其 markers 列表包含一个标记。当使用 Realm.add(_:update:) 保存时,它会使用相同的主键更新现有的 Jog,以便其属性与传入对象的属性相匹配。这会导致现有的 Jog 对象被更新为仅包含单个新标记。

如果您调整 fillDbWithMarker 以检索具有给定 ID 的现有 Jog 并将标记附加到其 markers 列表中,您将获得您所追求的行为。

关于ios - Realm <List> 已填充但只有一个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34160884/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com