Преобразование NSURL в NSData из didPickMediaItems

Кажется, я не могу преобразовать NSURL в NSData. NSURL появляется при распечатке, но затем, когда я пытаюсь преобразовать его в NSData, переменная audioData продолжает возвращать nil.

func mediaPicker(mediaPicker: MPMediaPickerController!, didPickMediaItems mediaItemCollection: MPMediaItemCollection!)
{
    selectedSong = mediaItemCollection.items[0] as MPMediaItem

    songUrl = selectedSong.valueForProperty(MPMediaItemPropertyAssetURL) as? NSURL
    println("\(songUrl)")

    audioData = NSData(contentsOfURL: songUrl) as NSData
    println("\(audioData)")
}

Отредактированный код для обнаружения ошибки

songUrl - это URL-адрес песни, находящейся в моей библиотеке iPod

    var errorPointer:NSErrorPointer!
    audioData = NSData(contentsOfURL: songUrl, options: NSDataReadingOptions.DataReadingMappedAlways, error: errorPointer)
    if audioData == nil
    {
        println("\(errorPointer)")
    }

Этот код выводит на консоль сообщение об ошибке: «Неустранимая ошибка: при развертывании необязательного значения неожиданно обнаружен ноль».

Изменить № 2

Используя формат в формате ошибки в ответе ниже, теперь я получаю сообщение об ошибке:

Произошла ошибка: Error Domain = NSCocoaErrorDomain Code = 256 «Операция не может быть завершена. (Ошибка какао 256.)» UserInfo = 0x146f4a90 {NSURL = ipod-library: //item/item.m4a? Id = 3210273692689505570}


person user3353890    schedule 22.10.2014    source источник
comment
используйте _ 1_ и сообщите нам, в чем заключается ошибка.   -  person Michael Dautermann    schedule 23.10.2014
comment
Спасибо за ответ ... Я написал ваш код так: audioData = NSData (contentsOfURL: songUrl, options: NSDataReadingOptions.DataReadingMappedAlways, error: NSErrorPointer ()), хотя я не уверен, что правильно инициализировал указатель ошибок, не было любая распечатка ошибок на моей консоли.   -  person user3353890    schedule 23.10.2014
comment
На консоли не должно быть вывода. Вам нужно зарегистрировать ошибку.   -  person rdelmar    schedule 23.10.2014
comment
@rdelmar круто, спасибо за совет, я попробую и вернусь к вам   -  person user3353890    schedule 23.10.2014
comment
Да, не объявляйте NSErrorPointer() в вызове contentsOfURL. Объявите его снаружи, передайте через contentsOfURL в качестве параметра и затем распечатайте ошибку, если audioData вернется к нулю.   -  person Michael Dautermann    schedule 23.10.2014
comment
Что такое songUrl, добавьте это к своему вопросу.   -  person zaph    schedule 23.10.2014
comment
Пойдите и прочтите параметры ошибки. Вам действительно нужно знать о них, они очень полезны, даже быстрее, чем вопрос SO.   -  person zaph    schedule 23.10.2014
comment
Смотрите код в ответе ниже, ответ только на форматирование.   -  person zaph    schedule 23.10.2014
comment
@Zaph Я уже некоторое время пытаюсь выяснить, что такое ошибка Какао 256, но мне еще не повезло. Есть ли у вас какие-либо предложения?   -  person user3353890    schedule 23.10.2014
comment
URL-адрес подходит только для AVFoundation; NSData не сможет ничего сделать с NSURL. Из документации Apple: использование URL-адреса за пределами платформы AV Foundation не поддерживается.   -  person zaph    schedule 23.10.2014


Ответы (1)


URL-адрес подходит только для AVFoundation, NSData не сможет ничего сделать с NSURL.
Из документации Apple:

«Использование URL вне структуры AV Foundation не поддерживается».

Пример того, как закодировать параметр ошибки:

var error: NSError?
audioData = NSData(contentsOfURL: songUrl, options: .DataReadingUncached, error: &error)

if audioData == nil {
    if let unwrappedError = error {
        println("An Error Occurred: \(unwrappedError)")
    }
}
person zaph    schedule 23.10.2014
comment
тьфу, извини, попробую еще раз. Весь NSErrorPointer немного сбил меня с толку, я подумал, что он запрашивает что-то еще, а не обычный NSError. Спасибо за работу со мной. - person user3353890; 23.10.2014
comment
Хорошо, теперь я думаю, что у меня правильная ошибка ... Программа печатает unwrappedError как Произошла ошибка: Error Domain = NSCocoaErrorDomain Code = 256 Операция не может быть завершена. (Ошибка какао 256.) UserInfo = 0x146f4a90 {NSURL = ipod-library: //item/item.m4a? Id = 3210273692689505570} - person user3353890; 23.10.2014