核心数据实体全局数据

Posted

技术标签:

【中文标题】核心数据实体全局数据【英文标题】:Core Data Entity Global Data 【发布时间】:2021-04-13 15:55:27 【问题描述】:

我有一个用于存储地震报告的核心数据实体。我想存储一些全局数据来跟踪数据上次更新的时间。

日期应该是商店中所有实体对象通用的单个日期。

我可以为此使用实体 userInfo 吗?我无法确定这是只读的还是可以在运行时更改。

有没有更好的方法?我不想将它存储在 UserDefaults 中,因为如果删除了 sql 文件,我希望“更新日期”数据也消失。

【问题讨论】:

【参考方案1】:

除了实际数据之外,持久存储还可以包含有关存储的元数据。那将是一个很好的地方。元数据是NSPersistentStore 的一部分,因此您必须深入到NSPersistentContainer 才能获取并更改它。像这样的

guard let persistentStore = persistentContainer.persistentStoreCoordinator.persistentStores.first else 
    return

var metadata = persistentContainer.persistentStoreCoordinator.metadata(for: persistentStore)
metadata["updated"] = Date()
persistentContainer.persistentStoreCoordinator.setMetadata(metadata, for: persistentStore)
self.saveContext()

最后一行是因为在您保存更改之前不会保存元数据,即使它是元数据而不是实际数据。

最好先读取现有的元数据,因为 Core Data 会在其中放置一些自己的元数据。您可能无法破坏它,但请确保先阅读它并保留现有值。

【讨论】:

以上是关于核心数据实体全局数据的主要内容,如果未能解决你的问题,请参考以下文章

第 11 章 全局属性和其他

重命名核心数据实体而不丢失数据

通过迁移将核心数据实体及其数据移动到新的核心数据模型文件中

核心数据迁移删除实体数据

第六十八节,htnl全局属性和其他属性

以核心数据实体作为属性的子类 UITextField