我正在尝试创建一个使用coredata在本地存储数据的应用。然后我想共享/导出该数据(来自coredata)以供其他使用相同应用程序的设备使用。
是否可以将coredata从一台设备发送到另一台设备?我可以复制* .sqlite文件并覆盖其他设备中的coredata吗?
我看到这篇帖子 how to export Core Data to CSV 允许将核心数据导出为csv,但我想要实现的是自己传递核心数据。
谢谢!
答案 0 :(得分:3)
您可以使用NSPersistentStoreCoordinator的migratePersistentStore: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
方法内执行了所有操作以避免并发问题。