2011-11-06 24 views
1

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

我使用Xcode 4.2并启用了ARC。

任何帮助将是伟大的!

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

回答

2

你有没有想过这个?问题是你不检查设备是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]; 

} 
+0

使用presentFromFromBarButtonItem的:动画:completionHandler:有可能是incidental-相同条件代码可用于该呼叫或原presentFromRect:inView:动画:完成处理程序调用。 –

相关问题