【发布时间】:2015-02-27 16:25:52
【问题描述】:
我正在开发一个 iOS 应用程序,使用带有后台配置的 NSURLSession 从相机胶卷上传视频。用户可以将多个视频排队上传(队列是串行执行的)。
单个上传包括:
- 使用 PHImageManager 的
requestAVAssetForVideo方法获取对 PHAsset 的 AVURLAsset 引用。 - 将资源复制到临时目录(因为您无法直接从 AVURLAsset 的 URL 上传)。
- 使用 NSURLSessionUploadTask 上传资源
我可以将多个视频排队,并且该过程在前台运行良好。他们一个接一个地完成。
但是,如果我将几个视频排队,然后将应用程序置于后台。一旦执行到达copyItemAtURL:toURL:error: 阶段,它就会停止,直到我再次将应用程序置于前台。 (我知道这一点是因为我在本地通知中发布调试语句,在锁定屏幕上可见)。
在后台运行时是否可以使用copyItemAtURL:toURL:error:?
如果没有,是否可以使用 AVAssetExportSession 代替?
编辑 1 我在连接到调试器时对此进行了测试,虽然没有,但该应用程序从不执行复制命令。但只有当应用程序再次被前台显示时才会这样做。
编辑 2
为了澄清,执行在复制命令处停止。它不会产生错误并继续执行。并且实现fileManager:shouldCopyItemAtURL:toURL: 委托方法不会改变任何事情。该方法的文档还说:
在复制每个项目之前,文件管理器会询问其委托人是否 实际上应该这样做。它通过调用 文件管理器:shouldCopyItemAtURL:toURL:方法;如果该方法不是 已实现(或进程在 OS X 10.5 或更早版本中运行) 改为调用 fileManager:shouldCopyItemAtPath:toPath: 方法。如果 委托方法返回 YES,或者如果委托没有实现 适当的方法,文件管理器继续复制文件或 目录。
【问题讨论】:
-
你有没有实现
shouldCopyItemAtURL? -
不,但在使用
defaultFileManager时,这不是必需的,是吗?现在就试试看…… -
刚刚更新了问题,似乎没有帮助...
标签: ios objective-c afnetworking background-process nsurlsession