首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHAsset复制视频完成

PHAsset复制视频完成
EN

Stack Overflow用户
提问于 2018-08-27 20:07:20
回答 1查看 400关注 0票数 0

我希望将视频文件从照片库复制到我的应用程序的文档目录中,并希望收到完成通知。下面是我要做的:

代码语言:javascript
复制
    let videoAsset = fetchResult.object(at: indexPath.item)
    print(videoAsset.description)

    let options = PHVideoRequestOptions()
    options.version = .original

    PHImageManager.default().requestAVAsset(forVideo: videoAsset, options: options) { [weak self] (avAsset, audioMix, info) in

        if let avurlAsset = avAsset as? AVURLAsset {
            let url = avurlAsset.url
            let toUrl = //some Url
            let fileManager = FileManager.default

            do {
              try fileManager.copyItem(at: url, to: toUrl)
            } catch {
               NSLog("Unable to copy file from \(url) to \(toUrl)")
            }
        }
    }

这种方法的唯一问题是我无法收到copyItem完成时的通知。什么是copyItem方法的替代方法(或者完全不同于上面的方法),它至少在复制完成之前是阻塞的?是否可以使用FileHandle &读取连续的字节并写入另一个文件?这是否足够同步?

编辑:正如亚历克斯所指出的,copyItem实际上是同步例程。仔细检查后,我发现我有时会在复制时出错。不确定为什么当它是我复制的app的Documents文件夹时会出现权限错误。

代码语言:javascript
复制
  2018-08-27 20:30:07.485841+0530 MyProject[3577:1288452] Copying file...
2018-08-27 20:30:07.487880+0530 MyProject[3577:1288452] stat on /var/mobile/Media/DCIM/107APPLE/IMG_7915.MP4: Operation not permitted
2018-08-27 20:30:07.512994+0530
 MyProject[3577:1288452] Unable to copy file from    file:///var/mobile/Media/DCIM/107APPLE/IMG_7915.MP4 to    file:///var/mobile/Containers/Data/Application/CC13FD5A-E4CF-42A1-931F-2F1FFE799C15/Documents/IMG-0027.mov, Error Domain=NSCocoaErrorDomain Code=513 "“IMG_7915.MP4” couldn’t be copied because you don’t have permission to access “Documents”." UserInfo=   
{NSSourceFilePathErrorKey=/var/mobile/Media/DCIM/107APPLE/IMG_7915.MP4,    NSUserStringVariant=(
   Copy
  ),   

  NSDestinationFilePath=/var/mobile/Containers/Data/Application/CC13FD5A-E4CF-42A1-931F-2F1FFE799C15/Documents/IMG-0027.mov, NSFilePath=/var/mobile/Media/DCIM/107APPLE/IMG_7915.MP4, NSUnderlyingError=0x111c441c0 {Error Domain=NSPOSIXErrorDomain Code=1 "Operation not permitted"}}
EN

回答 1

Stack Overflow用户

发布于 2018-08-27 21:31:49

Copyitem:将指定路径下的项目同步复制到新位置。

如果项复制成功或文件管理器的委托故意停止操作,则返回true。如果发生错误,则返回false。

这是一个sync方法,所以在catch之后执行,没有错误,那么它意味着成功复制。

https://developer.apple.com/documentation/foundation/filemanager/1407903-copyitem

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52039021

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档