ios - YapDatabase 关系在重命名时不更新文件路径

标签 ios yapdatabase

我正在开发一个 iOS 应用程序,它可以录制音频并将其与一些元数据一起显示在表格 View 中。为了保存记录,我正在使用 YapDatabase。通过阅读 wiki,我能够保存记录并在文件和记录之间创建边缘。它按预期工作,例如,如果我删除记录,YapDatabaseRelation 扩展名也会删除与该记录相关的文件。现在,如果我重命名该文件并更新其 fileURL 属性,则不更新它,而是删除该文件。

目前为了解决这个问题,我使用文件管理器手动重命名文件,然后更新其 fileURL 属性。我在这里遗漏了什么吗?

最佳答案

i manually rename the file using file manager and then update its fileURL property

这是正确的做法。

YapDatabaseRelationship 不支持除删除链接文件外的任何文件操作。如果您好奇原因,请继续阅读。

YapDatabaseRelationship 扩展无法区分:

  • “请帮我重命名这个文件”
  • “请删除之前链接的文件,现在链接到这个新路径”

也就是说,它所看到的是:

  • 你之前给它的边缘(filePathA)
  • 你现在给它的优势(filePathB)

它知道 fileURL 不同,因此边缘发生了变化。因此,从它的角度来看,先前的边现在已被破坏/删除,并且将被新边替换。因此它运行断边的删除规则,即删除filePathA。

有人可能会争辩说,扩展应该能够根据 filePathB 是否存在来确定一个人的意图。但事实并非如此。一些开发人员会选择先创建数据库边缘,然后再将文件移动到位。为什么?

当同时使用文件系统(例如磁盘上的图像)和数据库时,您基本上有 2 个独立的原子系统。例如,考虑以下操作:

  1. 将图像写入文件系统
  2. 更新数据库以链接到图像

如果应用程序在第 1 步完成之后但在第 2 步之前崩溃,那么您可能正在“泄漏”应用程序的文档文件夹中的文件。但是,如果您执行相反的操作(第 2 步,然后第 1 步),那么从不“泄漏”文件的意义上来说,您会更安全,但新的问题是数据库项可能指向一个不是的 fileURL还有效。这可能是也可能不是问题。一些开发人员使用数据库来跟踪 Cache 文件夹中的项目,他们知道这些项目可能随时消失。

我希望这能消除一些困惑。

关于ios - YapDatabase 关系在重命名时不更新文件路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34985290/

相关文章:

ios - 将重新排序图标设置为透明 UITableViewCells - moverowat 函数

ios - 无法将 NSArray 中的所有数据存储到 NSMutableDictionary 中?

ios - 如何使用 YapDatabase 快速保存表中的多个条目

ios - iOS 上的键值存储数据库

ios - TabBarController 之前的启动画面

ios - 列出可用的输出音频目标 AVAudioSession

ios - 谷歌登录 iOS : preferredInterfaceOrientationForPresentation (7) crash