У меня возникли проблемы при создании PDF-файла из формы - есть несколько страниц (до 20, и я хочу создать файл в фоновом потоке)Подождите, пока файл PDF не будет готов?
Я хотел бы использовать обработчик завершения, поэтому файл создается, я хочу показать его в QLPreviewController. Но когда плохое использование функции ожидания/сна, она всегда сбой с ошибкой, что файл еще не закончен.
Так что на данный момент:
func exportPDF(fileName:String, task: completionHandler:(success:Bool) -> Void) {
// run on background
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), {
UIGraphicsBeginPDFContextToFile(pdfFileName, CGRectZero, nil);
UIGraphicsBeginPDFPageWithInfo(CGRectMake(0, 0, 612, 792), nil);
// write pages
UIGraphicsEndPDFContext()
completionHandler(success:true) // how do i wait till file has finshed?
})
}
Ill вызов с:
exportPDF(filepath, task: task, completionHandler:{(success:Bool) -> Void in
let when = dispatch_time(DISPATCH_TIME_NOW, Int64(0.2 * Double(NSEC_PER_SEC)))
let queue = dispatch_get_main_queue()
dispatch_after(when, queue) {
if self.finish == true {
let preview = ExportQLPreviewController()
preview.task = self.task
preview.dataSource = self
preview.preferredContentSize = CGSizeMake(700, 700)
preview.emaildelegate = self.emaildelegate
self.navigationController?.pushViewController(preview, animated: false)
} else {
let preview = QLPreviewController()
preview.dataSource = self
preview.preferredContentSize = CGSizeMake(700, 700)
self.navigationController?.pushViewController(preview, animated: false)
}
}
})
Есть ли что-то не так? Как можно ждать, пока мой файл не будет написан? Потому что без метода «wait» он всегда сбой (похоже, что обработчик завершения не дожидается завершения UIGraphicsEndPDFContext())