我正在尝试从互联网上下载文件并将其放在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)
任何想法?
答案 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
是下载图片的路径。