文件存在于主线程中,但后台线程表示它不存在(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并做它的事情。

这是怎么回事?

+0

Tripple check'videoPath'对于所有呼叫都是相同的。 – shallowThought

+0

@shallowThought我只是把url打印到控制台,它们确实是一样的 – simplexity

+0

线程考虑事项 - 可以安全地从多个线程调用共享FileManager对象的方法。但是,如果使用委托来接收有关移动,复制,删除和链接操作状态的通知,则应创建文件管理器对象的唯一实例,将委托指定给该对象,然后使用该文件管理器启动你的操作。 –

确定,如果任何人有这个问题,我解决它通过以下方式:

而不是检查的videoPath和创造在后台线程Data对象(以及冒着它不能够检测到它的超出了我的理由),我在主线程上创建了Data对象,并简单地将创建的Data对象传递给上传函数。简单并照顾到问题!

有时最好的解决方案不是找出系统,而是要打败它。