NSURLDownload:断言失败([path isAbsolutePath])麻烦

时间:2015-09-06 23:04:46

标签: macos swift cocoa nsurldownload

我正在尝试从互联网上下载文件并将其放在Application Support目录下的应用程序名称目录中,并且我一直在

"2nd"

这是我写的代码:

Assertion failed: ([path isAbsolutePath]), function -[NSURLDownload     setDestination:allowOverwrite:], file /SourceCache/CFNetwork/CFNetwork-720.5.7/Foundation/NSURLDownload.mm, line 370.

当我单步执行代码时,一切看起来都是正确的。 self.source是 (HTTPS:/remoteDomain.com/img/downloadimage.jpg) 一个NSURL

self.destination是我系统中的完整路径(文件:/Users/ryan/Library/Application%20Support/AppName/downloadimage.jpg)

任何想法?

1 个答案:

答案 0 :(得分:1)

回答您特定主题的问题: 错误消息表明您的路径无效。为图像创建路径的正确方法如下:

let fileManager = NSFileManager.defaultManager()

var folder = "~/Library/Application Support/[APPNAME]/someFolder" as NSString
folder = folder.stringByExpandingTildeInPath

if fileManager.fileExistsAtPath(folder as String) == false {
    do {
        try fileManager.createDirectoryAtPath(folder as String, withIntermediateDirectories: true, attributes: nil)
    }

    catch {
       //Deal with the error
    }
}

<强> BUT @jtbandes是对的。您应该使用NSURLSessionDownloadTask下载文件。 它是Foundation.framework的一部分,可在OS X,iOS和watchOS上使用。

使用它的原因是Apple不断更新此Api以符合最新标准。例如,您不必担心IPv4或IPv6等。这可以避免您的应用中出现崩溃和奇怪的行为。

这是你如何使用它(Swift):

var imageRequest = NSURLRequest(URL: self.source)
let session = NSURLSession.sharedSession()
let downloadTask = session.downloadTaskWithRequest(imageRequest) { (url: NSURL?, response: NSURLResponse?, error: NSError?) -> Void in
    //Work with data
}

downloadTask.resume()

请注意,url是下载图片的路径。