我在raywanderlich.com上关注了一篇文章,但它使用电子邮件进行导入和导出。
我实际上通过压缩我的 .sqlite 文件并使用 .abc 重命名文件的扩展名来实现导出(使用您的应用程序独有的扩展名)。通过这种方式,用户不知道扩展名,因此通过编辑此文件而损坏的机会可能很低。对于导入,我只需解压缩文件并替换现有模型。注意这里我只是用导入的文件替换我现有的数据。我在一个应用程序中使用过它。并且没有抱怨。如果扩展名未知,人们很少编辑。
关于旧数据模型,AFAIK 如果您已经处理了核心数据迁移,则应将旧模型迁移到新模型。
关于在导入期间验证文件,我认为您无法验证 .sqlite 文件?我的意思是验证,您需要打开 .sqlite 文件并读取它,并且要读取它,它必须与架构匹配。如果它已损坏,它将不匹配并且应用程序将崩溃。您所能做的就是捕获异常并抛出错误消息。
另一种方式
- 将 .sqlite 文件重命名为 .db 之类的文件,因此用户可能不会尝试使用任何 .sqlite 查看器打开它。
- 导出为 xml 或 json。通过这种方式,您可以验证导入文件,如果您不只是在导入期间替换现有数据,这将很容易。
优点 1. 简单的方法,您不需要任何压缩库或任何额外的方法来转换为 xml 或 json。
缺点
- 而且,如果您不只是在导入期间替换现有数据,那么您必须做很多事情。您必须将此 .sqlite 中的所有实体复制到另一个实体。在这种情况下,我只需将数据导入 json 并重命名文件扩展名。在导入期间,我只是解析 json 并创建/更新托管对象上下文。在这个 json 案例中,我将创建 UUID 来唯一标识每条记录。
核心数据生成的 .sqlite 不是普通的 .sqlite 文件,所以如果用户尝试使用 sqllite 查看器打开它,会有些意外。
一旦文件退出应用程序。我们无法控制它的使用方式。如果用户导入损坏的文件,我们所能做的就是抛出一些错误消息。
希望这可以帮助。