У меня очень странная авария из приложения iOS. Нижеприведенная функция представляет собой реализацию некоторого протокола, поэтому я не могу изменить его декларацию, чтобы использовать обратный вызов с успехом/неудачей. Он имеет входные параметры и ожидает 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) –