2015-06-03 2 views
2

Я загружаю файл из DocumentPicker (iCloud, dropbox и т. Д.). Этот файл может быть .стр, .docx, .pdf, ...Почему NSData (contentsOfURL: url) всегда нуль?

Когда я хочу, чтобы преобразовать его в 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") 
} 

Я не могу понять, почему он равен нулю, файл существует на этом пути! Где моя ошибка?

Некоторые больше информации

Скриншот, показывая, что это не проблема, сфера, но инициализатор (как указано в моем вопросительным название) уже возвращает ноль. В этом примере я использую предложение от ответа ниже, используя contentsOfFile

enter image description here

Использование в ErrorPointer

"The operation couldn’t be completed. (Cocoa error 257.)" UserInfo=0x7fac556cbf00 {NSFilePath=SUPERLONGPATH<NSUnderlyingError=0x7fac570beb20 "The operation couldn’t be completed. Permission denied"})

происхождения файла

Файл загружается через 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 
    } 

Решение

Как это происходит .стр и .numbers "файлы" не содержит файлов, но папки (контейнеры). Поэтому они не могут быть загружены. Теперь работает .pdf. Спасибо всем за помощь

+0

Покажите свой реальный код, включая контекст, если вы хотите реальную помощь. – matt

+0

Попробуйте 'var error: NSError? ; let data = NSData (contentsOfURL: urlToFile !, options: nil, error: & error) 'и напечатать ошибку в случае сбоя. –

+0

я сделал. И обновил мой вопрос – gutenmorgenuhu

ответ

0

Это выглядит проблема с прицелом. Вы определяете свою локальную переменную data внутри фигурных скобок и она не будет существовать после фигурных скобок.

Избавьтесь от слова let.

Таким образом, вы будете присваивание переменных данных из области видимости

+0

Извините. Это не ответ. Проверьте мой комментарий к другому ответу – gutenmorgenuhu

+0

Как говорит Мэтт, ваш NSData Init может терпеть неудачу ** также **, но у вас определенно есть проблема с областью. –

Смежные вопросы