【问题标题】:Realm Swift How to update an List objectRealm Swift 如何更新列表对象
【发布时间】:2018-04-24 15:31:48
【问题描述】:

我在尝试更新列表中的值时遇到问题。 这是我的数据库模型:

class User: Object {

@objc dynamic var id : Int = 0
@objc dynamic var height : Int = 0
@objc dynamic var age : Int = 0
@objc dynamic var sex : String = ""
@objc dynamic var physicalActivity : Double = 1.0
@objc dynamic var goal : String = ""
let weightProgress = List<WeightProgress>()
let calories = List<Calories>()

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

}
}


class Calories : Object {

@objc dynamic var date : String?
@objc dynamic var eatenCalories : Int = 0

}

主要功能是,用户输入他吃了多少卡路里,并将其保存到数据库。日期由Date() 生成并转换为String。如果下一个值具有相同的Date 我想更新现有的eatenCalories 属性,如果Date 不同我想创建另一个记录到数据库。

有什么想法吗?

现在在添加每个值之后,它会在 DB 中创建另一条记录。

BR iMat

【问题讨论】:

  • 实际上,如果您的对象是通过用户输入生成的,则两个对象不能具有相同的Date,因为它们至少会相差几秒钟。那么你希望你的日期匹配到什么精度呢?顺便说一句,在 Realm 中将日期存储为 Strings 是一个坏主意。 Realm 支持存储 Date 属性,所以你应该这样做。
  • 我正在使用 SwiftDate pod 来管理所有 Date 对象。我只想存储 Day,没有时间,例如:25.04.2018(该格式是强制性的 - 这就是为什么我像 String 一样存储它)

标签: swift realm


【解决方案1】:

将现有对象添加或更新到领域。仅当对象具有主键时才传递 true 以进行更新。如果 Realm 中不存在具有相同主键值的对象,则插入该对象。否则,现有对象将使用任何更改的值进行更新。

你应该使用

self.realm.add(item, update: true)

你应该给你的对象添加主键

【讨论】:

    猜你喜欢
    • 2017-09-23
    • 1970-01-01
    • 1970-01-01
    • 2016-11-05
    • 1970-01-01
    • 2017-08-12
    • 1970-01-01
    • 2018-07-11
    • 1970-01-01
    相关资源
    最近更新 更多