为什么NSData(contentsOfURL:url)总是为零?

时间:2015-06-03 18:09:16

标签: swift nsdata

我从DocumentPicker下载文件(iCloud,dropbox等)。该文件可以是.pages,.docx,.pdf,...

当我想将其转换为NSData以进行文件上传时,我总是会收到一个零值:

if NSFileManager.defaultManager().fileExistsAtPath(urlToFile!.path!) {
  let data = NSData(contentsOfURL: urlToFile!) // initializer returns nil, although file and path exist
  println(data) // prints nil
}
else {
  println("Does not exist")
}

我无法弄清楚为什么它是零,文件存在于此路径中! 我的错误在哪里?

更多信息

截图,显示它不是范围问题,但初始化程序(如我的问题标题中所述)已经返回nil。在此示例中,我使用contentsOfFile

中的答案提出建议

enter image description here

使用ErrorPointer

  

"操作无法完成。 (可可错误257。)" UserInfo = 0x7fac556cbf00 {NSFilePath = SUPERLONGPATH< NSUnderlyingError = 0x7fac570beb20"操作无法完成。权限被拒绝"})

文件来源

该文件通过DocumentPicker下载:

let docPicker = UIDocumentPickerViewController(documentTypes: ["public.content"], inMode: UIDocumentPickerMode.Import)
docPicker.delegate = self
docPicker.modalPresentationStyle = UIModalPresentationStyle.OverCurrentContext
self.presentViewController(docPicker, animated: true, completion: nil)




func documentPicker(controller: UIDocumentPickerViewController, didPickDocumentAtURL url: NSURL) {
    labelDatei.text = "Bereit"
    labelDateiChose.text = url.lastPathComponent
    urlToFile = url
  }

解决方案

碰巧.pages和.numbers"文件"没有文件,但文件夹(容器)。所以他们无法上传。使用.pdf现在可以使用了。感谢大家的帮助

1 个答案:

答案 0 :(得分:-1)

看起来范围问题。您在大括号内定义了局部变量data,并且在大括号后它将不存在。

删掉let这个词。

通过这种方式,您将从封闭范围中分配可变数据