是否可以将一些"幻数"数据添加到核心数据持久存储?
我有一个旧的应用程序,它使用自定义二进制文件格式。每个文件都以一个5字节的幻数(假设是0A 0B 0C 0D 0E
)和一个1字节的格式版本标识符开始;之后是实际数据。当用户试图打开文件时,应用程序的现有版本执行以下检查:
- 如果文件的前5个字节不匹配幻数,用户得到一个消息,如"该文件不是该应用程序可以读取的格式。"文件扩展名可能有误。"
- 如果幻数匹配,但版本标识符高于应用程序的版本可以读取,用户得到一个消息,如"该文件是用此应用程序的新版本创建的。"你需要升级到新版本。"
我想在应用程序的新版本中利用核心数据进行存储,同时仍然使用相同的文件扩展名并保留与旧版本应用程序的适当兼容性:尝试使用旧版本打开用新版本编写的文件的用户应该得到他们应该升级的消息,而不是其他消息。这可能吗?以及如何?
NSManagedObjectModel
有一个versionIdentifiers
,它返回一组开发人员定义的字符串,用于标识"包含的"模型版本。(请记住,当迁移到一个新的模型版本时,旧的模型将包含在模型文件/目录中。)
实际上,文档中写着
该值是用来作为调试提示,帮助您确定组合在一起以创建合并模型的模型。
,但您仍然可以使用此属性的内容完全符合您的目的。
至于"幻数",在我看来,你试图在未经用户同意的情况下使数据存储格式无效。坏主意。在我看来,你应该选择另一种设计模式。