Ich habe sehr seltsame Absturz von iOS App erlebt. Die folgende Funktion ist eine Implementierung eines Protokolls, so dass ich ihre Deklaration nicht ändern kann, um einen Erfolgs-/Fehler-Callback zu verwenden. Es hat Eingabeparameter und erwartet AVAsset am Ausgang. Mein Problem ist während des Schreibens des Assets. Ich bekomme merkwürdige Abstürze beim Verlassen der Dispatch-Gruppe (Variable dg). Ich habe die Linie des Absturzes mit Kommentar markiert. Dieser Absturz ist nicht immer passiert. Nur von Zeit zu Zeit. Dies ist die Funktion:Seltsames Verhalten der 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
}
Kann jemand eine Idee haben, was ist die Ursache für diesen Absturz? Ich habe nur diese Informationen von Absturzbericht in xCode.
Was ist das Crash-Detail? –
Ich habe es nicht. Nur diese Linie. –
Im Terminal habe ich nur diese Information: (lldb) –