UIPrintInteractionController的presentFromRect问题

我使用presentFromRect方法显示UIButton中的AirPrint选项,一切都按预期工作,但如果我一直按住button足够快,我的应用程序崩溃与EXC_BAD_ACCESS,可能是因为popup不释放。

即时通讯启用ARC使用Xcode 4.2。

任何帮助将是伟大的!

更新2:仅在iOS 5模拟器上出现问题,iPad 4.3模拟器按预期工作。

更新:

这是真正的问题:

*终止应用程序,由于未捕获的exception'NSGenericException',原因:' – [UIPopoverController dealloc]达到popup仍然可见。

这里是代码:

在这里,我打电话给我的方法:

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]; } } 

你有没有解决这个问题? 问题是你不检查设备是iPad还是iPhone。 iPhone不支持presentFromRect:但iPad。 这就是为什么你在iPhone上运行时遇到不好的访问。

这是你需要做的:

 if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { [printController presentFromFromBarButtonItem:sender animated:YES completionHandler:completionHandler]; } else { [printController presentAnimated:YES completionHandler:completionHandler]; }