我從iOS App遇到非常奇怪的崩潰。下面的函數是一些協議的實現,所以我不能改變它的聲明來使用一些成功/失敗的回調函數。它具有輸入參數,並希望在輸出端使用AVAsset。我的問題是在寫資產期間,我在離開調度組(dg變量)期間出現了奇怪的崩潰。我用評論標記了崩潰的一行。這種崩潰並不總是會發生。只是不時。這是功能:Dispatch Group的奇怪行爲
func writeAsset(to url: URL, metadataArray: [AVTimedMetadataGroup]) -> AVAsset {
let writer = try! AVAssetWriter(url: url, fileType: AVFileTypeQuickTimeMovie)
writer.movieTimeScale = track.timeScale
// setup writer, inputs and metadata adaptor and so on ...
if writer.startWriting() {
writer.startSession(atSourceTime: kCMTimeZero)
}
let writeQueue = DispatchQueue(label: "HH.Write.Track.Queue")
let dg = DispatchGroup()
var i = 0
dg.enter() // Entering to the group
writerMetadataIn.requestMediaDataWhenReady(on: writeQueue) {
while writerMetadataIn.isReadyForMoreMediaData {
//let group = ..fetch next group to write
if i < metadataArray.count {
let group = metadataArray[i]
if writerMetadataAdaptor.append(group) {
}
i += 1
} else {
writerMetadataIn.markAsFinished()
writer.finishWriting {
dg.leave() // CRASH IN THIS LINE
}
break
}
}
}
dg.wait()
let writtenAsset = AVAsset(url: url)
return writtenAsset
}
有人可能知道這次事故的原因是什麼?我只有來自xCode崩潰報告的這些信息。
什麼是崩潰細節? –
我沒有。就這一行。 –
在終端中,我只有這樣的信息:(lldb) –