【问题标题】:Realm created_at & updated_at timestamps领域 created_at 和 updated_at 时间戳
【发布时间】:2017-07-30 15:31:19
【问题描述】:

我想在我的 Realm 对象 created_at 和 updated_at 中实现 2 个时间戳。

created_at 只会在对象首次插入数据库时​​设置一次。

updated_at 会在每次修改和保存对象时存储一个新的时间戳。

我发现我可以做到这一点的唯一方法是使用存储库模式,使用 create 和 update 函数,然后设置时间戳。然而采用这种模式意味着重构大量代码。

据我所知,Realm 对象没有我可以在对象模型本身上实现的任何类型的钩子,例如 beforeSave 和 afterSave,这将是一个有用的替代方案。

除了存储库模式,或者在我的整个应用程序中的任何realm.write 之前手动更新时间戳,还有其他方法可以实现吗?

【问题讨论】:

    标签: swift swift3 realm


    【解决方案1】:

    Realm 提供了两种方法来实现您的目标。

    第一种方法是Key-Value Observation,它实现了一种广泛使用的同名设计模式。见Apple's documentation on the topic。

    第二种方法是Realms 自己的替代方法,称为Notifications。您可以获取有关每个写入事务到特定Realm 实例的通知并处理您需要处理的那些,或者您可以注册以接收有关single Objects 的通知。

    当您观察/收到有关对象更新的通知时,您可以使用这两种方法来更新您的 Realm 对象的 updated_at 属性。处理 created_at 属性更加容易,您只需在对象初始化时将其设置为不可变值,甚至可以在对象初始化函数中自动完成。

    【讨论】:

    • 感谢您的回复大卫(再次)。如果我有一个集中的“TimestampManager”来管理每个模型,这可能是个好主意。我确实考虑了created_at 的初始化日期,但后来我发现它只有在您获取并保存对象而不是使用realm.add 的更新选项时才有效。如果您“获取并保存”,则日期一旦设置就不会改变,但是使用realm.add(obj, update:true),created_at 会变成updated_at,我觉得这很不稳定......我会发出通知: )
    猜你喜欢
    • 2019-01-22
    • 2011-07-17
    • 1970-01-01
    • 2016-08-28
    • 1970-01-01
    • 2015-09-16
    • 1970-01-01
    • 2013-10-05
    • 1970-01-01
    相关资源
    最近更新 更多