文件存在于主线程中,但后台线程表示它不存在(iOS)
问题描述:
我将AVMutableComposition
视频导出到临时位置,然后成功将其传输到相机胶卷中。在出口,我的主线程上检查是否存储为let videoPath
返回的相机胶卷URL与存在:文件存在于主线程中,但后台线程表示它不存在(iOS)
if FileManager.default.fileExists(atPath: videoPath) {
print("FILE AVAILABLE")
} else {
print("FILE NOT AVAILABLE")
}
它。所以我把它放在AVPlayer
,它玩的很好。于是我想将它上传到我的Web服务器,所以我投的同一网址为Data
对象的内容在后台线程我运行相同的FileManager.default.fileExists
这个时候才这样做的控制台说FILE NOT AVAILABLE
这显然使得Data
尝试构造函数失败。
之前调用后台线程功能,我甚至在主线程上检查文件是否存在,并它但随后在后台它说它不。
现在什么是最奇怪的部分,为什么我来到SO是因为在这个初始文件检查失败后,我移动到另一个视图,它可以运行相同的后台功能,并在第二次(第一次后的所有后续时间失败)控制台显示FILE AVAILABLE
并做它的事情。
这是怎么回事?
答
确定,如果任何人有这个问题,我解决它通过以下方式:
而不是检查的videoPath
和创造在后台线程Data
对象(以及冒着它不能够检测到它的超出了我的理由),我在主线程上创建了Data
对象,并简单地将创建的Data
对象传递给上传函数。简单并照顾到问题!
有时最好的解决方案不是找出系统,而是要打败它。
Tripple check'videoPath'对于所有呼叫都是相同的。 – shallowThought
@shallowThought我只是把url打印到控制台,它们确实是一样的 – simplexity
线程考虑事项 - 可以安全地从多个线程调用共享FileManager对象的方法。但是,如果使用委托来接收有关移动,复制,删除和链接操作状态的通知,则应创建文件管理器对象的唯一实例,将委托指定给该对象,然后使用该文件管理器启动你的操作。 –