0

installTapOnBusコンソールを正常に更新する非常に単純なクロージャーがありますが、UI 要素は更新しません。コードは次のとおりです。

self.meter.text="..."
let inputNode = audioEngine.inputNode
let bus = 0

inputNode!.installTapOnBus(bus, bufferSize: 2048, format: inputNode!.inputFormatForBus(bus)) {
    (buffer: AVAudioPCMBuffer!, time: AVAudioTime!) -> Void in
        var someFeature:Float=0.0
        for var i=0; i<Int(buffer.frameLength); i += 1{
           someFeature += fabs(buffer.floatChannelData.memory[i])
        }
        someFeature /= Float(buffer.frameLength)
        self.meter.text="\(someFeature)" // No effect!
        print("\(someFeature)") // This works
    }

selfおそらく、クロージャーに弱い参照を送信する必要がありますが、構文がわかりません。UI 要素を更新する方法についてのフィードバックやアイデアをお待ちしております。読んでくれてありがとう。

4

2 に答える 2

1

self.meter.text = ...解決策はメインスレッドで呼び出しているようです:

dispatch_async(dispatch_get_main_queue()) { 
    self.meter.text="\(someFeature)"
}

誰かがこれについてさらに詳細を記入できる場合に備えて、この回答を1日か2日オフのままにします.

于 2016-01-19T20:51:06.213 に答える