【发布时间】:2011-11-06 05:26:34
【问题描述】:
我使用 presentFromRect 方法从 UIButton 显示 AirPrint 选项,一切都按预期工作,但如果我继续按足够快的按钮,我的应用程序会因 EXC_BAD_ACCESS 而崩溃,可能是因为弹出框没有被释放。
我正在使用启用了 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];
}
}
【问题讨论】:
标签: objective-c ios ios5 airprint