【问题标题】:Streaming audio from parse in Swift 3在 Swift 3 中从解析流式传输音频
【发布时间】:2017-01-04 16:51:12
【问题描述】:

我使用 Back4app 作为解析服务器 我正在尝试从 Prase 流式传输音频 一切正常,但是如果我单击 tableview 上的任何索引(索引 0 除外),我会收到错误“致命错误:在展开可选值时意外发现 nil”

我不知道为什么当我点击索引 0 时它工作正常,但任何其他索引我都出错了!

func grabSong() {        
    let SongQuery = PFQuery(className: "Songs")

    SongQuery.getObjectInBackground(withId:iDArray[SelectedSongNumber!] ,block: { (object : PFObject?, error : Error?) ->  Void in           
        if let AudioFileURLTemp : PFFile = object?.value(forKey: "SongFile") as? PFFile {            
            print(AudioFileURLTemp)

            audioP = AVPlayer(url: NSURL(string: AudioFileURLTemp.url!) as! URL)            
            audioP.play()        
        }       
    })
}

我在这一行得到了错误:

audioP = AVPlayer(url: NSURL(string: AudioFileURLTemp.url!) as! URL)

【问题讨论】:

  • 逐个检查:AudioFileURLTemp.url,然后是NSURL(string: AudioFileURLTemp.url!) as! URL。如果你使用 Swift 3,是不是必须在NSURL & URL 之间切换?
  • 我想是的,如果我删除(as!URL)我得到这个错误“不能转换类型'NSURL的值?'到预期的参数类型“URL”并建议我添加为! URL .... 我还检查了 AudioFileURLTemp.url 它给了我不同的歌曲链接取决于我点击了哪个索引
  • 你不能用URL(string:AudioFileURLTemp.url!)吗?
  • 我可以使用“audioP = AVPlayer(url: URL(string:AudioFileURLTemp.url!)!)”但我遇到了同样的问题,第一个索引工作正常,其余的我得到了同样的错误

标签: swift parse-platform avplayer back4app


【解决方案1】:

我找到了错误的原因。这是因为某些歌曲名称中有空格,但第一首歌曲的名称中没有空格。所以我尝试在浏览器中复制链接,看看浏览器是如何处理空格的。我发现它用 %20 替换了空格。

所以我用“%20”替换了每个空格,现在它可以工作了。

正确的代码

func grabSong() {        
    let SongQuery = PFQuery(className: "Songs")
    SongQuery.getObjectInBackground(withId:iDArray[SelectedSongNumber] ,block: { (object : PFObject?, error : Error?) ->  Void in                    
        if let AudioFileURLTemp : PFFile = object?.value(forKey: "SongFile") as? PFFile {                       
            var songID = AudioFileURLTemp.url!.replacingOccurrences(of: " ", with: "%20")

            audioP = AVPlayer(url: URL(string:songID)!)
            audioP.play()
        }
    })
}

【讨论】:

  • Swift 有一个内置函数:.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) 这样做的好处是它可以处理其他可能出现在歌曲名称中的无效字符,例如像“é”这样的重音字符您还可以使用几个不同的字符集选项。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-28
  • 1970-01-01
  • 2011-09-07
  • 1970-01-01
  • 2020-09-14
  • 2012-03-23
  • 1970-01-01
相关资源
最近更新 更多