2016-01-09 3 views
0

Я пытаюсь воспроизвести аудиофайл с Parse.com. После запуска этого кода я получаю Ошибка при получении данных! распечатано. Я не могу понять, почему это может произойти. Я думаю, что URL-адрес правильный. Когда я попробовал его в браузере, он начал загружать музыку, которую я пытаюсь воспроизвести. Может ли кто-нибудь сказать мне, что не так с этим кодом или как решить эту проблему?Воспроизведение музыки из parse in swift

let query = PFQuery(className: "AudioFile") 
    query.whereKeyExists("audio") 
    query.findObjectsInBackgroundWithBlock { (objects:[PFObject]?, error: NSError?) -> Void in 
     if error == nil { 
      let audio = objects?[0] 
      let audioFile = audio?["audio"] as? PFFile 
      let filePath = audioFile?.url 
      let url = NSURL(fileURLWithPath: filePath!) 
      let soundData = NSData(contentsOfURL: url) 
      if soundData != nil { 
       do { 
        self.audioPlayer = try AVAudioPlayer(data: soundData!) // AVAudioPlayer(contentsOfURL: url) 
        self.audioPlayer.prepareToPlay() 
        self.audioPlayer.volume = 1.0 
        self.audioPlayer.play() 
       } catch { 
        print("Error occured while playing music!") 
       } 
      } else { 
       print("Error occured while getting data!") 
      } 
     } else { 
      print("Error occured while downloading file!") 
     } 
    } 

ответ

0

Я изменил код таким образом.

query.whereKeyExists("audio") 
    query.findObjectsInBackgroundWithBlock { (objects:[PFObject]?, error: NSError?) -> Void in 
     if error == nil { 
      let audio = objects?[0] 
      let audioFile = audio?["audio"] as? PFFile 
      audioFile?.getDataInBackgroundWithBlock({ (audio: NSData?, error: NSError?) -> Void in 
       if audio != nil { 
        do { 
         self.audioPlayer = try AVAudioPlayer(data: audio!) 
         self.audioPlayer.prepareToPlay() 
         self.audioPlayer.delegate = self 
         self.audioPlayer.volume = 10.0 
         self.audioPlayer.play() 
        } catch { 
         print("Error occured while playing music!") 
        } 
       } else { 
        print ("Somehow audio is nil!") 
       } 
      }) 
     } else { 
      print("Error occured while downloading file!") 
     } 
    } 

Значение 1.0 указывает на полную громкость аудиоплеера, но я не смог его услышать на симуляторе, поэтому использовал 10.0. В первом случае NSData был равен нулю, поэтому мне пришлось изменить эту часть кода и использовать getDataInBackgroundWithBlock. Этот метод представляет собой метод parse, который находит объекты асинхронно и вызывает данный блок с результатами. В блоке NSData больше не нуль, поэтому AVAudioPlayer работает нормально.

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