iPad で印刷するようにコーディングし、さまざまなドキュメントを確認しました。私のコードは正しいように見えますが、コントローラーが表示されてキャンセルをクリックすると、次のエラーでクラッシュします: メイン スレッドまたは Web スレッド以外のスレッドから Web ロックを取得しようとしました。これは、セカンダリ スレッドから UIKit を呼び出した結果である可能性があります。現在クラッシュ中...
dispatch_async を追加しようとしましたが、役に立ちませんでした。これは私のコードです:
UIPrintInfo *printInfo = [UIPrintInfo printInfo];
printInfo.outputType = UIPrintInfoOutputGeneral;
printInfo.jobName = self.title;
UIPrintInteractionController *pc = [UIPrintInteractionController sharedPrintController];
pc.delegate = (id <UIPrintInteractionControllerDelegate>)self;
pc.printInfo = printInfo;
UIViewPrintFormatter *printFormatter = [self.webView viewPrintFormatter];
printFormatter.startPage = 0;
pc.printFormatter = printFormatter;
__weak SnaglistPrintViewController *weakSelf = self;
UIPrintInteractionCompletionHandler completionHandler =
^(UIPrintInteractionController *printController, BOOL completed,
NSError *error) {
dispatch_async( dispatch_get_main_queue (), ^{
NSLog(@"Handler completed: %d", completed);
if (!completed && error) {
NSLog(@"FAILED! due to error in domain %@ with error code %u", error.domain, (unsigned int)error.code);
}
else {
[weakSelf back];
}
} );
};
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
[pc presentFromRect:CGRectZero inView:self.view animated:YES completionHandler:completionHandler];
}