将核心数据数据库从一台设备传递/导出到另一台设备
Posted
技术标签:
【中文标题】将核心数据数据库从一台设备传递/导出到另一台设备【英文标题】:Passing/Export core data database from one device to another 【发布时间】:2016-01-08 06:34:40 【问题描述】:我正在尝试创建一个应用程序,该应用程序将使用 coredata 在本地存储数据。然后我想共享/导出该数据(来自 coredata),以供使用同一应用程序的其他设备使用。
是否可以将核心数据从一台设备发送到另一台设备?我可以只复制 *.sqlite 文件并覆盖其他设备中的 coredata 吗?
我看到这个帖子 how to export Core Data to CSV 允许将核心数据导出为 csv,但我想要实现的是传递核心数据本身。
谢谢!
【问题讨论】:
您是否在问如何在设备之间同步数据? 是的。但我想在本地进行,可能使用蓝牙或任何点对点通信 【参考方案1】:您可以使用migratePersistentStore:toURL:options:withType:error:
或NSPersistentStoreCoordinator 将存储保存到文件中。获得文件后,您可以将其复制到其他设备。
如果您想要数据同步,其他解决方案可能包括 iCloud。
【讨论】:
谢谢你。我会研究一下。【参考方案2】:blog post 提出了一种将数据库导出为一个文件的好方法。除了使用migratePersistentStore:toURL:options:withType:error:
方法外,它还创建了NSPersistentStoreCoordinator
的副本以保持当前数据库的一致性,并禁用sqlite 预写和日志以将所有数据库减少到一个文件。
在接收 sqlite 文件的设备中,以下对我来说很好:
1 - 保存持久存储的 URL (persistentContainer.persistentStoreDescriptions.first?.url
)
2 - 删除当前持久存储,在 persistentStoreCoordinator.persistentStores
内的存储实例上调用 persistentStoreCoordinator.remove
3 - 将新数据库保存在旧数据库的 URL 中,使用 FileManager.default.replaceItem
以及第一步保存的 URL 和接收到的文件。
4 - 调用 persistentStoreCoordinator.addPersistentStore
将商店添加到核心数据将管理的商店列表中。
另外,在执行整个过程之前,最好重置所有上下文 (context.reset) 以确保没有保留任何引用,在我的例子中,我执行了 persistentStoreCoordinator.performAndWait
方法中的所有内容以避免并发问题。
【讨论】:
以上是关于将核心数据数据库从一台设备传递/导出到另一台设备的主要内容,如果未能解决你的问题,请参考以下文章
XMPPFramework - 如何将图像从一台设备传输到另一台设备?