현재 FromRect 메서드를 사용하여 UIButton에서 AirPrint 옵션을 보여 주므로 모든 것이 예상대로 작동하지만 버튼을 너무 빨리 누르면 EXT_BAD_ACCESS로 인해 응용 프로그램이 충돌합니다.UIPrintInteractionController presentFromRect 문제
ARC를 사용하는 Xcode 4.2를 사용하고 있습니다.
도움이 될 것입니다.
업데이트 2 : 문제는 iOS 5 시뮬레이터에서만 발생하며 iPad 4.3 시뮬레이터는 예상대로 작동합니다.
업데이트 :
응용 프로그램을 종료* 인해 캐치되지 않는 예외 'NSGenericException', 이유에 : 여기
진짜 문제 '- [UIPopoverController의 dealloc] 팝 오버가 여전히 표시되는 동안했다. ' 여기
내 메소드를 호출하고 있습니다 : 여기
코드입니다
PrintUtils* printUtils = [[PrintUtils alloc] init];
printUtils.delegate = self;
[printUtils setHeader:@"Header"];
[printUtils print:self.webView fromRect:self.myButton.frame inView:self.menuView];
내 방법 :
- (void)print:(UIWebView *)webView fromRect:(CGRect)rect inView:(UIView *)view
{
printController = [UIPrintInteractionController sharedPrintController];
[printController setDelegate:self];
if(!printController){
NSError* error = [[NSError alloc] initWithDomain:@"Print unavailable!" code:0 userInfo:nil];
[self showError:error];
return;
}
UIPrintInteractionCompletionHandler completionHandler =
^(UIPrintInteractionController *printController, BOOL completed, NSError *error) {
if(!completed && error){
[self showError:error];
}
};
UIPrintInfo* printInfo = [UIPrintInfo printInfo];
[printInfo setJobName:header];
[printInfo setDuplex:UIPrintInfoDuplexLongEdge];
[printInfo setOutputType:UIPrintInfoOutputGeneral];
UIPrintFormatter* viewFormatter = [webView viewPrintFormatter];
CustomPrintPageRenderer *pageRenderer = [[CustomPrintPageRenderer alloc] init];
[pageRenderer setJobTitle:[printInfo jobName]];
UIFont* font = [UIFont fontWithName:@"Helvetica" size:HEADER_FOOTER_TEXT_HEIGHT];
CGSize titleSize = [pageRenderer.jobTitle sizeWithFont:font];
pageRenderer.headerHeight = pageRenderer.footerHeight = titleSize.height + HEADER_FOOTER_MARGIN_PADDING;
[pageRenderer addPrintFormatter:viewFormatter startingAtPageAtIndex:0];
[printController setPrintPageRenderer:pageRenderer];
[printController setPrintInfo:printInfo];
[printController setPrintFormatter:viewFormatter];
[printController setShowsPageRange:YES];
[printController presentFromRect:rect inView:view animated:YES completionHandler:completionHandler];
}
UIPrintInteractionControllerDelegate 방법을 구현하는 문제를 해결하기 위해 내 시도 :
- (void)printInteractionControllerWillPresentPrinterOptions:(UIPrintInteractionController *)printInteractionController
{
if (visible) {
[printController dismissAnimated:YES];
}
}
presentFromFromBarButtonItem의 사용 : 여기
은 당신이해야 할 작업은 다음과 같습니다 completionHandler 호출. –