【问题标题】:Not downloading files to NSDocumentsDirectory correctly?没有正确下载文件到 NSDocumentsDirectory?
【发布时间】:2015-04-27 00:55:20
【问题描述】:

我想将文件下载到我的 NSDocumentsDirectory。我抓取一个作为下载链接的 url,并将该 url 存储到一个名为 url 的变量中这是我执行下载并将其存储到 Documents Directory 的代码,所以:

let data = NSURLConnection.sendSynchronousRequest(urlRequest, returningResponse: &response,error: &error)

if data != nil && error == nil{ 
  var documentsDirectoryUrl =  NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask).first as! NSURL
  documentsDirectoryUrl = documentsDirectoryUrl.URLByAppendingPathComponent(url.lastPathComponent)
  //Hold this file as an NSData and write it to the new location
  let fileData = NSData(contentsOfURL: NSURL(string:url)!)

  fileData!.writeToURL(documentsDirectoryUrl, atomically: false)   // true
  println("\(data!.length) bytes of data was written to Documents Directory.")
}
else if data!.length == 0 && error == nil{
  println("No data was returned")
}
else if error != nil{
  println("Error happened = \(error)");
}

由于我正在下载的文件是音乐文件,当我尝试从这些音乐文件播放音频时,当我尝试访问文件的路径时出现错误,因为该文件的路径设置为 nil。我认为这是下载文件的问题,因为我之前有代码工作,但后来我改变了下载音乐文件的方式,代码似乎中断了。任何帮助,将不胜感激。谢谢!

【问题讨论】:

  • 你检查模拟器沙箱,是否有下载文件?
  • 不,我没有。你是怎么做到的?
  • 您的代码毫无意义您检查了数据是否!= nil 然后您从 url 加载了 fileData ??? BTW url 是一个字符串?
  • @LeonardoSavioDabus 我刚刚从该链接获取代码:github.com/vandadnp/iOS-8-Swift-Programming-Cookbook/blob/… 并对其进行了修改,以便将其下载到文档目录中。
  • 记录documentsDirectoryUrl,然后双击finder->转到文件夹->粘贴url然后去那里查看。

标签: ios swift download nsurlconnection nsurl


【解决方案1】:
import UIKit


let documentsDirectoryUrl =  NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask).first as! NSURL

var error:NSError?
var response:NSURLResponse?

let data = NSURLConnection.sendSynchronousRequest(NSURLRequest(URL: NSURL(string: "http://i.stack.imgur.com/Xs4RX.jpg")!), returningResponse: &response, error: &error)

if let data = data where error == nil {
    let destinationUrl = documentsDirectoryUrl.URLByAppendingPathComponent(response!.suggestedFilename!)
    data.writeToURL(destinationUrl, atomically: true)   // true
    println("\(data.length) bytes of data was written to Documents Directory.")

}
if let error = error {
    println(error.description)
}

【讨论】:

  • 我只是有点困惑:我之前的实现可能出了什么问题?
  • @user1871869 不客气。正如我评论的那样,那里有很多错误。尝试比较两个代码,您会发现差异
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-29
  • 2019-01-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多