如何从 iOS 中的缓存中正确移动 In App Purchase 下载文件?

How to properly move In App Purchase download files from cache in iOS?

我正在尝试设置一个应用程序内购买的应用程序,在购买相应包时下载 12 个游戏级别的内容。

我对如何将下载的图像从缓存文件夹正确移动到文档文件夹感到困惑。到目前为止,这是我的代码:

func processDownload(sender: NSURL) {

    //Convert URL to String, suitable for NSFileManager
    var path:String = sender.path!
    path = path.stringByAppendingPathComponent("Contents")

    //Makes an NSArray with all of the downloaded files
    let fileManager = NSFileManager.defaultManager()
    var files: NSArray!
    do {
        files = try fileManager.contentsOfDirectoryAtPath(path)
    } catch let err as NSError {
        print("Error finding zip URL", err.localizedDescription)
    }

    //For each file, move it to Library
    for file in files {

        let pathSource: String = path.stringByAppendingPathComponent(file as! String)
        let pathDestination: String = NSSearchPathForDirectoriesInDomains(.LibraryDirectory, .UserDomainMask, true)[0]

        //Remove destination files b/c not allowed to overwrite
        do {
            try fileManager.removeItemAtPath(pathDestination)
        }catch let err as NSError {
            print("Could not remove file", err.localizedDescription)
        }

        //Move file
        do {
           try fileManager.moveItemAtPath(pathSource, toPath: pathDestination)
            print("File", file, "Moved")
        }catch let err as NSError {
            print("Couldn't move file", err.localizedDescription)
        }
    }
}

除了从两个 do 语句中打印的错误外,实际上一切正常。尝试删除第一个 do 块中同名的任何现有文件时,出现以下错误:

Could not remove file “Library” couldn’t be removed because you don’t have permission to access it.

这随后会导致打印下一个 do 语句的下一个错误,因为无法删除原始语句。

关于为什么会发生这种情况以及如何将下载的文件正确保存到其他地方的任何想法?谢谢。

我找到了合适的解决方案。此代码会将下载的 zip 文件夹中的所有项目移动到 Library 目录。

func processDownload(sender: NSURL) {

    //Convert URL to String, suitable for NSFileManager
    var path: String = sender.path!
    path = path.stringByAppendingPathComponent("Contents")

    //Makes an NSArray with all of the downloaded files
    let fileManager = NSFileManager.defaultManager()
    var files: NSArray!
    do {
        files = try fileManager.contentsOfDirectoryAtPath(path)
    } catch let err as NSError {
        print("Error finding zip URL", err.localizedDescription)
    }

    //For each file, move it to Library
    for file in files {

        let currentPath: String = path.stringByAppendingPathComponent(file as! String)
        var pathDestination: String = NSSearchPathForDirectoriesInDomains(.LibraryDirectory, .UserDomainMask, true)[0]
        pathDestination = pathDestination.stringByAppendingPathComponent(file as! String)

        //Move file
        do {
            try fileManager.moveItemAtPath(currentPath, toPath: pathDestination)
            print("File", file, "Moved")
        }catch let err as NSError {
            print("Couldn't move file", err.localizedDescription)
        }
    }
}

我现在可以像这样使用这些文件在 SpriteKit 中制作 SKTextures:

var rippleTex = SKTexture(image: UIImage(contentsOfFile: NSSearchPathForDirectoriesInDomains(.LibraryDirectory, .UserDomainMask, true)[0].stringByAppendingPathComponent("P06_ripple.png"))!)