gpt4 book ai didi

cocoa - 复制/备份持久存储

转载 作者:行者123 更新时间:2023-12-03 16:50:34 26 4
gpt4 key购买 nike

通常,当我备份应用程序的核心数据文件时,我只会在应用程序运行时将 .sqlite 文件复制到另一个位置。但现在日志(wal)已启用,这不再起作用。我看不到 NSPersistentStoreCordinator 或 NSManagedObjectContext 写入新文件的方法。我猜我可能有两种方法:

    • 关闭持久存储并使用 @{@"journal_mode": @"DELETE"} 再次打开它,然后复制 .sqlite 文件。
  1. 添加另一个持久存储并可能从原始 ps 复制到新存储?

还有更好的想法吗?谢谢。

最佳答案

更改日志模式会消除日志文件,所以很简单。不过,我不知道我是否会信任它供您使用,因为不能保证 Core Data 实际上已刷新 SQLite 文件的所有新更改。可能没问题,但内存中可能存在一些 Core Data 尚未写出的更改。这几乎肯定是安全的,但偶尔也有可能无法正常工作。

选项 2 会更安全,但工作量更大。我将使用 NSPersistentStoreCoordinatormigratePersistentStore:toURL:options:withType:error: 方法创建第二个持久存储(文档特别提到该方法对于“另存为”很有用) ” 操作)。告诉 Core Data 为您创建副本应该确保实际复制了所有必需的内容。只是不要在主持久存储协调器上执行此操作,因为迁移后,PSC 会删除对原始存储对象的引用(文件仍然存在,但该 PSC 不再使用它)。步骤是

  1. 创建一个新的仅迁移 NSPercientStoreCoordinator 并添加您的原始持久存储文件。
  2. 使用此新 PSC 迁移到新文件网址。
  3. 删除对这个新 PSC 的所有引用,不要将其用于其他任何用途。

关于cocoa - 复制/备份持久存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22670273/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com