YapDatabaseRelationship 在重命名时不更新文件路径
YapDatabaseRelationship does not update file path on rename
我正在开发一个 iOS 应用程序,它可以录制音频并在 table 视图中显示它以及一些元数据。为了保存记录,我使用 YapDatabase
。通过阅读 wiki,我能够保存记录并在文件和记录之间创建边缘。它按预期工作,例如,如果我删除记录,YapDatabaseRelation
扩展名也会删除与记录相关的文件。现在,如果我重命名文件并更新其 fileURL
属性,则不更新文件,而是删除文件。
目前为了解决这个问题,我使用文件管理器手动重命名文件,然后更新其 fileURL
属性。我在这里遗漏了什么吗?
i manually rename the file using file manager and then update its fileURL property
这是正确的做法。
YapDatabaseRelationship 不支持除删除 linked 文件外的任何文件操作。如果您好奇原因,请继续阅读。
YapDatabaseRelationship 扩展无法区分:
- "please rename this file for me"
- "please delete the previous linked file, and link to this new path now"
也就是说,它所看到的是:
- 你之前给它的边缘 (filePathA)
- 你现在给它的边缘 (filePathB)
知道fileURL不一样,所以边变了。因此,从它的角度来看,以前的边现在是 broken/deleted,并且将被新边替换。因此它运行断边的删除规则,即删除filePathA。
有人可能会争辩说,扩展程序应该能够根据 filePathB 是否存在来确定一个人的意图。但事实并非如此。一些开发人员会选择先创建数据库边缘,然后再将文件移动到位。为什么?
同时使用文件系统(例如磁盘上的图像)和数据库时,您基本上有 2 个独立的原子系统。例如,考虑以下操作:
- 将图像写入文件系统
- 更新数据库link到图片
如果应用程序在第 1 步完成后但在第 2 步之前崩溃,那么您的应用程序的文档文件夹中可能有 "leaking" 个文件。但是,如果您执行相反的操作(第 2 步,然后第 1 步),那么在没有 "leaking" 文件的意义上,您会更安全,但新的问题是数据库项可能指向一个 fileURL,它不是还有效。这可能是也可能不是问题。一些开发人员使用数据库来跟踪 Cache 文件夹中的项目,他们知道这些项目随时可能消失。
我希望这能消除一些困惑。
我正在开发一个 iOS 应用程序,它可以录制音频并在 table 视图中显示它以及一些元数据。为了保存记录,我使用 YapDatabase
。通过阅读 wiki,我能够保存记录并在文件和记录之间创建边缘。它按预期工作,例如,如果我删除记录,YapDatabaseRelation
扩展名也会删除与记录相关的文件。现在,如果我重命名文件并更新其 fileURL
属性,则不更新文件,而是删除文件。
目前为了解决这个问题,我使用文件管理器手动重命名文件,然后更新其 fileURL
属性。我在这里遗漏了什么吗?
i manually rename the file using file manager and then update its fileURL property
这是正确的做法。
YapDatabaseRelationship 不支持除删除 linked 文件外的任何文件操作。如果您好奇原因,请继续阅读。
YapDatabaseRelationship 扩展无法区分:
- "please rename this file for me"
- "please delete the previous linked file, and link to this new path now"
也就是说,它所看到的是:
- 你之前给它的边缘 (filePathA)
- 你现在给它的边缘 (filePathB)
知道fileURL不一样,所以边变了。因此,从它的角度来看,以前的边现在是 broken/deleted,并且将被新边替换。因此它运行断边的删除规则,即删除filePathA。
有人可能会争辩说,扩展程序应该能够根据 filePathB 是否存在来确定一个人的意图。但事实并非如此。一些开发人员会选择先创建数据库边缘,然后再将文件移动到位。为什么?
同时使用文件系统(例如磁盘上的图像)和数据库时,您基本上有 2 个独立的原子系统。例如,考虑以下操作:
- 将图像写入文件系统
- 更新数据库link到图片
如果应用程序在第 1 步完成后但在第 2 步之前崩溃,那么您的应用程序的文档文件夹中可能有 "leaking" 个文件。但是,如果您执行相反的操作(第 2 步,然后第 1 步),那么在没有 "leaking" 文件的意义上,您会更安全,但新的问题是数据库项可能指向一个 fileURL,它不是还有效。这可能是也可能不是问题。一些开发人员使用数据库来跟踪 Cache 文件夹中的项目,他们知道这些项目随时可能消失。
我希望这能消除一些困惑。