【发布时间】:2015-05-13 06:47:37
【问题描述】:
我有一些主数据,它们是 JSON 文件,我需要使用 CoreData 导入。事务点是所有master正常插入的时候。但是,在提交之前,内存的使用量正在增加。由于提交前内存过载导致应用崩溃。
我正在考虑以下两种解决方案。
使用 SQLite 的功能,例如将数据临时保存到文件。 (我不确定该函数是否存在。)
使用两个 DB 文件。一个是用于操作的,另一个是临时的。如果导入正常,则从临时数据库替换为操作数据库。
但仍然不确定。有谁知道这种情况下的任何解决方案?谢谢。
更新1:
因此,您是要导入一个空的数据存储,还是要向现有数据添加失败时需要恢复的数据?
就我而言,这是下面的过程。
删除现有数据。 (所有表格)
导入空数据。
主数据完成后,提交。如果发生错误,回滚事务。删除和导入还原,保证主数据的一致性。
另外,为什么要在移动设备上存储大量数据?
我客户的需求。
更新2:
我尝试禁用 undoManager,但结果并没有太大影响。我不需要“撤消”,但我需要回滚。在这种情况下,setUndoManager 可用...?
[[self managedObjectContext] setUndoManager:nil] ;
【问题讨论】:
-
所以您是要导入一个空的数据存储,还是要添加到需要在失败时恢复的现有数据?另外,为什么要在移动设备上存储大量数据?
-
@Wain 感谢您的评论。我编辑了我的问题。首先删除所有数据,然后导入到空数据中。
-
您是否考虑过批量导入?然后,您可以将每个批次保存在一个私有 MOC 中,完成后可以将其保存到另一个私有 MOC 上,该 MOC 连接到持久存储协调器。
-
@andrewbuilder 谢谢。我不知道。你能分享我更多的细节或参考网址吗?我想详细说明一下。
-
如果我记错了(当我使用 CoreData 时),UndoManager 实际上在 iOS 上是默认禁用的。
标签: ios sqlite swift core-data