如何将 NSUserDefaults 转换为 CoreData

Posted

技术标签:

【中文标题】如何将 NSUserDefaults 转换为 CoreData【英文标题】:How to convert NSUserDefaults to CoreData 【发布时间】:2017-02-27 18:33:18 【问题描述】:

我有一个应用程序是我在 3 年前开发的,它使用 Obj C 和 NSUserDefaults (NSCoding / NSKeyed​Archiver) 作为我保存数据的方式。几个月前,我重新设计了应用程序,并认为现在是重新开发应用程序的好时机,但这次使用的是 Swift 3 和 Core Data。该应用程序已完成,但这个难题的最后一部分是如何将我保存的旧数据 (NSUserDefaults) 转换为新的 CoreData 实体。

所有迁移示例似乎都来自旧版本的数据库 (CoreData),并向其中添加了一些新内容。我很难找到我正在尝试做的教程或起点。我确信它之前已经完成了并且可能已经完成了数千次,但我似乎找不到任何示例或文档。

我希望有人能够通过教程或类似项目为我指明正确的方向。

【问题讨论】:

为什么会有人反对这个?你想让我列出我读过的关于这个主题的书,以及我从 Lynda 和 Udemy 那里查到的在线课程吗?我已经完成了关于这个主题的研究,但我只是没有找到我需要的东西。如果这让你不高兴,我很抱歉。 起点是 Xcode Core Data 模板中提供的代码。对象模型的结构很大程度上取决于用户默认结构。 为什么会有从 NSUserDefaults 到核心数据的迁移指南? NSUserDefault 用于小、简单、独立的数据位,它们在本质上不是独立的然后是同质的。 NSUserDefaults 毕竟只是一本字典。将有关于如何在核心数据中建模数据的指南,不会有从 NSUserDefaults 迁移的指南。如果有,我会吃掉我的派帽。 【参考方案1】:

对于您没有找到指南,我并不感到惊讶,因为这不是很常见的情况。用户默认值和核心数据有两种不同的用途,因此想要从一个迁移到另一个是不寻常的。

假设您的数据对 Core Data 有意义,

    创建一个新的 Core Data 模型并添加一个或多个实体来表示您的数据。 在应用启动时迁移,然后再尝试使用数据。

迁移过程类似于:

    检查数据是否存在于用户默认值中。 如果是这样,请阅读它并创建适当的托管对象来表示它。根据用户默认值设置这些新对象的属性。 从用户默认值中删除数据,以便下次第 1 步不会触发新的迁移。

执行此操作的代码都是自定义的,但应该不难。

【讨论】:

感谢汤姆花时间为我分解。

以上是关于如何将 NSUserDefaults 转换为 CoreData的主要内容,如果未能解决你的问题,请参考以下文章

将转换保存到 NSUserDefaults?

如何快速将 NSIndexPath 添加到 NSUserDefaults

你可以在 NSUserDefaults 中保存 Parse 信息吗? (IOS)

如何将 MPMediaItemCollection 保存到 NSUSerDefaults?

如何将 NSUserDefaults 数据与 iCloud 同步

如何将 C# datetimeOffset 转换为指定格式