ios - App Crash, "Lost Connection" -
similar this question,
i having issues , app crashing in same way. assume same answer on other question: memory issue; except getting crash during avassetexportsession call.
guard let exporter = avassetexportsession(asset: mixcomposition, presetname: avassetexportpresethighestquality) else { return } exporter.outputfiletype = avfiletypempeg4 exporter.outputurl = url exporter.videocomposition = maincomposition print("done") exporter.exportasynchronously(completionhandler: { dispatchqueue.main.async(execute: { self.exportdidfinish(exporter) print("removing ai") self.removeai() print("removed ai") completion() }) }) func exportdidfinish(_ exporter:avassetexportsession) { if(exporter.status == avassetexportsessionstatus.completed) { print("cool") } else if(exporter.status == avassetexportsessionstatus.failed) { print(exporter.error any) } }
it prints "done" never prints "removing ai". doesn't print "cool" or "(error)"; crashes , says @ top of xcode "lost connection iphone..." other question states.
i assume memory issue, there nothing happening in between (to knowledge of how works) during asynchronous exporting waiting completion handler called. nothing gets called in between , unsure how handle this. thoughts?
i think avassetexportsession
object may deallocated while running async task. consider put class variable make sure async block can finish it's task. like:
class myclass { var exporter: avassetexportsession? func export() { exporter = avassetexportsession(asset: mixcomposition, presetname: avassetexportpresethighestquality) guard exporter != nil else { return } exporter.outputfiletype = avfiletypempeg4 exporter.outputurl = url exporter.videocomposition = maincomposition print("done") exporter?.exportasynchronously(completionhandler: { dispatchqueue.main.async { self.exportdidfinish(exporter) print("removing ai") self.removeai() print("removed ai") completion() } } } }
i'm not sure why put on main thread in completion block, maybe want ui later, leave there.
but import - make avassetexportsession
not stored on method may dealloc it. it's memory issue cause this.
Comments
Post a Comment