首页 > 解决方案 > 在 iOS 上执行期间正在删除临时文件

问题描述

令人惊讶的是,经过一段时间的调试,我发现我的应用程序tmp在 1 分钟左右后从目录中清除文件,没有任何其他用户操作,即使应用程序在前台运行也是如此。

根据文档,临时目录在应用程序执行期间保留文件,并且仅在之后或最多在其启动时将其删除。

我不想在这里移动/复制到缓存目录作为解决方法,我更惊讶为什么会发生这种情况。如果这有帮助,我会从 Files 应用程序中选择(使用UIDocumentPickerViewController)。

为了让它变得更好,有时有些文件会在那里持续很长时间,即使它们比其他文件更旧,在挑选后立即被删除。这可能会导致访问不正确,因为您的用户选择了一个文件,在应用程序仍在运行时去喝杯咖啡,然后按下按钮将其上传到某个地方或其他任何地方,文件就消失了。

我每次都可以用一个简单的应用程序复制它。

标签: iosobjective-ccachingdirectory

解决方案


在处理了一些临时文件之后,我不认为这是一个错误,它是临时文件在一段时间未打开时被删除的功能。我相信您可以通过区分普通文件和临时文件来更直接地管理它。根据此处更详细的文章,您可以使用该ManagedURL协议来解决您的问题:

public protocol ManagedURL {
    var contentURL: URL { get }
    func keepAlive()
}

public extension ManagedURL {
    public func keepAlive() { }
}

extension URL: ManagedURL {
    public var contentURL: URL { return self }
}

要保持后台操作处于活动状态:

URLSession.shared.uploadTask(with: request, fromFile: fileToUpload.contentURL) { _, _, _ in
    temporaryFile.keepAlive()
}

推荐阅读