2017-01-04 9 views
0

私はParseサーバとしてBack4appを使用しています Prase からオーディオをストリーミングしようとしていますが、すべて正常に動作しますが、テーブルビュー上のインデックス(インデックス0を除く) "致命的なエラー:予期せず、オプション値をアンラッピングしている間にゼロが見つかりました"Swiftのパースからオーディオをストリーミングする3

インデックス0をクリックしてもうまく動作しますが、私はエラーを得た理由は、私が見つけた

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

チェックピース: 'AudioFileURLTemp.url'は、その後、' NSURL(文字列:!AudioFileURLTemp.url)など! URL 'とする。 Swift 3を使用する場合は、 'NSURL'と' URL'を切り替える必要がありますか? – Larme

+0

私はそうだと思いますが、もし私が(URLとして)削除すれば、 "このタイプの値 'NSURLを変換できませんか?予想される引数型 'URL'に追加し、私に追加するように勧めます! URL ....私はAudioFileURLTemp.urlをチェックして、私がクリックしたインデックスに応じて別の曲のリンクを表示します – Basil

+0

'URL(string:AudioFileURLTemp.url!)'を使用できませんか? – Larme

答えて

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()   
     }  
    }) 
} 

は、私は、この行にエラーが発生しました。曲名の中にはスペースが入っているものもありますが、最初の曲には名前にスペースが含まれていないためです。だから、私はブラウザにリンクをコピーして、ブラウザがどのようにスペースを扱うのか見てみました。 %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() 
     } 
    }) 
} 
+2

Swiftには、 '.addingPercentEncoding(withAllowedCharacters:.urlPathAllowed)' これは、 "é"のようなアクセント付きの文字のように、曲名で終わる可能性のある他の無効な文字を処理するという利点があります。 また、あなたが使用できる文字セットのために。 – shim

関連する問題