Swift初心者のヒロポメです。
Firebase関連でつまづいてしまったので、お助けください・・・
【やりたいこと】
Firebaseから複数の音声データを取得して、collection viewに表示させたいです。
【つまづき箇所】
FirebaseのStorageにはすでに複数音声をアップ済です。
それらを取得してcollection viewに1個1個表示させたいものの、
ビルドはできても、最新の音声しか流れません。collection viewのうち、どのcellを押しても、
同じ最新の1つの音声しか流れません。
以下コードのsnapshotをprintしてみると、確かに1メッセージ分の情報しか出力されません。
FirebaseのDatabase上の構造は以下の通りです。
Media_Messagesの下に、childByAutoId、その下にsender_id, sender_name, toID, urlなどがぶら下がっています。
![
どこをいじればやりたいことが実現できますでしょうか。
アドバイス頂けますととても助かります、、、
よろしくお願いいたします。
Swift
var audioPlayer: AVAudioPlayer! Database.database().reference.child("Media_Messages").observe(.childAdded, with:{ (snapshot) in print(snapshot) /*出力結果: Snap (-L6tdyvGHT1hXnz34teV) { "sender_id" = mZJKe7aV8gWMNZS0GHfwfh649Sh2; "sender_name" = yeah; toID = 555; url = "https://firebasestorage.googleapis.com/v0/b/guy-4cc29.appspot.com/o/Audio_Storage%2FmZJKe7aV8gWMNZS0GHfwfh649Sh29F395AA3-A3EF-4612-AF25-9963E06B059D.m4a?alt=media&token=56ecd74b-0fee-4c17-b2a3-c290b73bdedc"; } */ if let dictionary2 = snapshot.value as? [String:AnyObject]{ if let audioUrl = dictionary2["url"] as? String { print(audioUrl) //https://firebasestorage.googleapis.com/v0/b/guy-4cc29.appspot.com/o/Audio_Storage%2FmZJKe7aV8gWMNZS0GHfwfh649Sh29F395AA3-A3EF-4612-AF25-9963E06B059D.m4a?alt=media&token=56ecd74b-0fee-4c17-b2a3-c290b73bdedc let url2 = URL(string: audioUrl) print(url2) //Optional(https://firebasestorage.googleapis.com/v0/b/guy-4cc29.appspot.com/o/Audio_Storage%2FmZJKe7aV8gWMNZS0GHfwfh649Sh29F395AA3-A3EF-4612-AF25-9963E06B059D.m4a?alt=media&token=56ecd74b-0fee-4c17-b2a3-c290b73bdedc) URLSession.shared.dataTask(with: url2!, completionHandler: { (data, response, error) in DispatchQueue.global().async{ DispatchQueue.main.async{ do { self.audioPlayer = try AVAudioPlayer(data:data!) } catch{} } } }).resume() } } } , withCancel:nil) //collectionviewで再生 func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { do{ audioPlayer.play() } catch { } }
まだ回答がついていません
会員登録して回答してみよう