0

以下は、ローカル Web サーバーの POST ハンドラーが実装されているコードです。クライアントデバイスからアップロードされたサーバーで NSData( (request as! GCDWebServerURLEncodedFormRequest).data ) の形式で曲をダウンロードします。

 webServer.addHandlerForMethod("POST",path:"/", requestClass: GCDWebServerURLEncodedFormRequest.self, processBlock:
        {request in
 let html: String = String(format: "<html><body><p>hi</p></body></html>")
 NSLog("Request Args %hhd bkmbk", (request as! GCDWebServerURLEncodedFormRequest).hasBody())

 NSLog("Request Args %@ bkmbk", (request as! GCDWebServerURLEncodedFormRequest).contentType)

この方法で、曲ファイルの NSData がサーバー側で正常に受信されます。受信したデータのサイズは、送信された実際のファイルに対応します。受信した曲を再生しようとすると、一部しか再生されずに停止します。ただし、アプリケーション全体はクラッシュしません。

 do{
  print((request as! GCDWebServerURLEncodedFormRequest).data.length)
  let player = try AVAudioPlayer(data: (request as! GCDWebServerURLEncodedFormRequest).data, fileTypeHint: "mp3")
  player.prepareToPlay()
  player.play()
        }catch{
           // ...
        }
        return GCDWebServerDataResponse(HTML:html)
    })

上記のメソッドはすべて AppDelegate.swift で実行され、バックグラウンド スレッドで実行されます。問題を解決するための助けをいただければ幸いです。ありがとう..!!

4

1 に答える 1

0

おそらく問題は、AVAudioPlayerインスタンスがローカル変数にあるために保持されないことです。がreturn GCDWebServerDataResponse(HTML:html)呼び出されると、ローカル変数とプレーヤーが破棄されます。

于 2016-04-14T18:17:52.073 に答える