【发布时间】:2020-10-27 04:21:06
【问题描述】:
令人惊讶的是,经过一段时间的调试,我发现我的应用程序在 1 分钟左右后从 tmp 目录中清除文件,而没有任何其他用户操作,即使应用程序在前台运行也是如此。
根据文档,临时目录应该在应用执行期间保留文件,并且仅在之后或最多在启动时将其删除。
我不想在这里移动/复制到缓存目录作为解决方法,我更惊讶为什么会发生这种情况。如果这有帮助,我会从“文件”应用中挑选(使用 UIDocumentPickerViewController)。
为了让它变得更好,有时有些文件会在那里保留很长时间,即使它们比其他文件更旧,在挑选后立即被删除。这可能导致访问不正确,因为您的用户选择了一个文件,在应用程序仍在运行时去喝杯咖啡,然后按下按钮将其上传到某个地方或其他任何地方,然后文件就消失了。
我每次都可以用一个简单的应用程序复制它。
【问题讨论】:
-
只是检查显而易见的 - 您使用的是正确的 tmp 目录,而不是自己删除这些文件,例如当某个变量超出范围时?也许发布一些代码......如果您可以轻松更改代码中的目录,一个简单的测试将是使用“普通”目录。
-
不,基本上我只是使用
UIDocumentPickerController然后在 didPick 上我返回它的路径。 (这是用作插件的 pod 代码)。文件消失大约需要一分钟左右。如果您在选择后打印tmp文件夹中的文件,它就在那里。然后,您等待 1 分钟,再次打印,但不存在。这是奇怪的部分。 -
当你这样做时会发生奇怪的事情!当您选择一个文档时,它通常会被复制,并且路径会发生奇怪的变化(相对于正常人的预期而言,这很奇怪,但我离题了)。当您选择文档时,它会被复制,并且通常
UIDocument的writeContentsToUrl ... originalUrl...会收到消息。这会创建一个副本,然后删除原始文件,以便文件可以以一种奇怪的方式更改。 Apple 这样做是为了让您轻松倒带,但基本上所有内容都会在您保存时重复。我怀疑这就是为什么新的 Apple 文件系统如此擅长复制文件的原因。 -
注意 - 我怀疑这是你的麻烦。该路径在复制过程中可能会发生变化,并且文档可能会在其他地方打开副本,因此它仍然存在,只是不在您期望的原始位置。
-
更奇怪的是,它不应该在应用程序仍在运行时删除文件,但它确实可以。通过阅读at the docs,它表示检索当前用户的路径。这很容易引起误解,因为它暗示这个 tmp 目录由所有应用程序共享,而实际上,每个应用程序似乎都有自己的。
标签: ios objective-c caching directory