将核心数据数据库从一台设备传递/导出到另一台设备

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 - 如何将图像从一台设备传输到另一台设备?

在 iOS 中将推送通知从一台设备发送到另一台设备

将数据库从一台机器导入/导出到另一台机器

如何检测我通过蓝牙连接从一台设备发送到另一台设备的消息

如何安全地将所有 IIS 设置从一台服务器导出到另一台服务器?

使用 p4 zip 和 unzip 将文件从一台 perforce 服务器导出到另一台