YapDatabaseRelationship在重命名时不更新文件路径

时间:2016-01-25 04:46:26

标签: ios yapdatabase

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

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

1 个答案:

答案 0 :(得分:1)

  

我使用文件管理器手动重命名文件,然后更新其fileURL属性

这是正确的方法。

除删除链接文件外,YapDatabaseRelationship不支持任何文件操作。如果您对此感到好奇,请继续阅读。

YapDatabaseRelationship扩展无法区分:

  • “请为我重命名此文件”
  • “请删除上一个链接文件,然后立即链接到此新路径”

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

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

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

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

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

  1. 将图像写入文件系统
  2. 更新数据库以链接到图像
  3. 如果应用在步骤1完成后崩溃,但在步骤2之前崩溃,那么您可能会在应用的“文档”文件夹中“泄漏”文件。但是,如果你执行了反向(步骤2,然后是步骤1),那么在不“泄漏”文件的意义上你会更安​​全,但是新的问题是数据库项可能指向不是文件的URL有效。这可能是也可能不是问题。一些开发人员使用数据库来跟踪Cache文件夹中的项目,他们知道这些项目可能随时消失。

    我希望这可以解决一些困惑。