将核心数据数据库从一个设备传递到另一个设备

时间:2016-01-08 06:34:41

标签: ios swift core-data

我正在尝试创建一个使用coredata在本地存储数据的应用。然后我想共享/导出该数据(来自coredata)以供其他使用相同应用程序的设备使用。

是否可以将coredata从一台设备发送到另一台设备?我可以复制* .sqlite文件并覆盖其他设备中的coredata吗?

我看到这篇帖子 how to export Core Data to CSV 允许将核心数据导出为csv,但我想要实现的是自己传递核心数据。

谢谢!

2 个答案:

答案 0 :(得分:3)

您可以使用NSPersistentStoreCoordinatormigratePersistentStore:toURL:options:withType:error:将商店保存到文件中。获得文件后,您可以将其复制到其他设备。

如果您想要数据同步,其他解决方案可能包括iCloud。

答案 1 :(得分:0)

blog post建议将数据库导出为一个文件的好方法。除了使用migratePersistentStore:toURL:options:withType:error:方法之外,它还创建NSPersistentStoreCoordinator的副本以保持当前数据库的一致性,并禁用sqlite的预写和日志功能以将所有数据库缩减为一个文件。

在接收 sqlite 文件的设备中,以下命令对我来说效果很好:

1-保存持久存储(persistentContainer.persistentStoreDescriptions.first?.url)的URL

2-删除当前的持久性存储,在persistentStoreCoordinator.remove内的存储实例上调用persistentStoreCoordinator.persistentStores

3-使用FileManager.default.replaceItem将新数据库保存在旧数据库的URL中,并在第一步中保存URL和接收到的文件。

4-调用persistentStoreCoordinator.addPersistentStore将商店添加到核心数据将要管理的商店列表中。

此外,在执行整个过程之前,最好重置所有上下文(context.reset)以确保不保留任何引用,在我的情况下,我在persistentStoreCoordinator.performAndWait方法内执行了所有操作以避免并发问题。

相关问题