0

うまく機能している NSURLSessionDownloadTask を使用してファイルをダウンロードしています。画像またはビデオ ファイルを一時ディレクトリに取得するとき。しかし、写真ライブラリに入れるには、それを恒久的な URL に移動する必要があります。私は何NSFileManagercopyItemAtURL:成功もなく を使用しています。それが投げる理由は何ですか?ファイルの種類がドキュメント ディレクトリと互換性がない可能性がありますか?

let directory : String = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0]


func URLSession(session: NSURLSession, downloadTask: NSURLSessionDownloadTask, didFinishDownloadingToURL location: NSURL) {

    if let fileName = self.file.zOrigFileName {
        let destinationPath = self.directory.stringByAppendingString("/\(fileName)")

        if let destinationURL = NSURL(string: destinationPath) {

            let fileManager = NSFileManager.defaultManager()

            //IF file with same name exists delete it before copying new file
            if fileAlreadyExistsAtURL(destinationURL) {
                do {
                    try fileManager.removeItemAtURL(destinationURL)
                } catch {
                    print("Error Removing Item At \(destinationURL.path)")
                }
            }

            do {
                try fileManager.copyItemAtURL(location, toURL: destinationURL)
                self.saveURLToPhotosLibrary(destinationURL)
            } catch {
                //This is line always printing. my try statement always throwing.
                print("Error Copying Item from \(location.path) to \(destinationURL.path)")
            }
        }
    }
}

ここに印刷ステートメントがあります。セキュリティのために、ドキュメント ディレクトリのアプリ バンドル ID を$(AppId)

Optional("/private/var/mobile/Containers/Data/Application/E8D9C365-15D2-40BD-B0B5-​​A000BEDA9F00/Library/Caches/com.apple.nsurlsessiond/Downloads/$(AppID)/CFNetworkDownload_CK3G3Z.tmp からアイテムをコピー中にエラーが発生しました") を Optional("/var/mobile/Containers/Data/Application/E8D9C365-15D2-40BD-B0B5-​​A000BEDA9F00/Documents/shortMovie.mov") に

4

1 に答える 1

1

間違った NSURL 初期化子を使用しています。ウィット パスを使用する場合は、fileURLWithPath 初期化子を使用する必要があります。

于 2016-07-29T17:28:06.603 に答える