Objective c UIPrintInteractionController存在错误提示问题

Objective c UIPrintInteractionController存在错误提示问题,objective-c,ios,ios5,airprint,Objective C,Ios,Ios5,Airprint,我使用presentFromRect方法从UIButton显示AirPrint选项,一切正常,但如果我继续按按钮的速度足够快,我的应用程序会因EXC_BAD_访问而崩溃,可能是因为popover没有发布 Im使用启用ARC的Xcode 4.2 任何帮助都会很好 更新2:问题只出现在iOS 5模拟器上,iPad 4.3模拟器工作正常。 更新: 真正的问题是: *由于未捕获的异常“NSGenericeException”而终止应用程序,原因:“-[UIPopoverController deallo

我使用presentFromRect方法从UIButton显示AirPrint选项,一切正常,但如果我继续按按钮的速度足够快,我的应用程序会因EXC_BAD_访问而崩溃,可能是因为popover没有发布

Im使用启用ARC的Xcode 4.2

任何帮助都会很好

更新2:问题只出现在iOS 5模拟器上,iPad 4.3模拟器工作正常。

更新:

真正的问题是:

*由于未捕获的异常“NSGenericeException”而终止应用程序,原因:“-[UIPopoverController dealloc]在popover仍然可见时到达。”

代码如下:

我在这里调用我的方法:

PrintUtils*PrintUtils=[[PrintUtils alloc]init];
printUtils.delegate=self;
[printUtils setHeader:@“Header”];
[printUtils print:self.webView from rect:self.myButton.frame inView:self.menuView];
我的方法:

-(void)打印:(UIWebView*)webView fromRect:(CGRect)rect inView:(UIView*)视图
{
printController=[UIPrintInteractionController sharedPrintController];
[printController setDelegate:self];
如果(!printController){
NSError*error=[[NSError alloc]initWithDomain:@“打印不可用!”代码:0用户信息:nil];
[自动淋浴错误:错误];
返回;
}
UIPrintInteractionCompletionHandler completionHandler=
^(UIPrintInteractionController*printController,布尔完成,N错误*错误){
如果(!已完成&错误){
[自动淋浴错误:错误];
}
};
UIPrintInfo*printInfo=[UIPrintInfo printInfo];
[printInfo setJobName:标题];
[printInfo setDuplex:UIPrintInfoDuplexLongEdge];
[printInfo setOutputType:UIPrintInfoOutputGeneral];
UIPrintFormatter*viewFormatter=[webView viewPrintFormatter];
CustomPrintPageRenderer*pageRenderer=[[CustomPrintPageRenderer alloc]init];
[pageRenderer setJobTitle:[printInfo jobName]];
UIFont*font=[UIFont fontWithName:@“Helvetica”大小:页眉\页脚\文本\高度];
CGSize titleSize=[pageRenderer.jobTitle sizeWithFont:font];
pageRenderer.headerHeight=pageRenderer.footerHeight=titleSize.height+页眉页脚边距填充;
[pageRenderer-addPrintFormatter:viewFormatter-startingAtPageAtIndex:0];
[printController设置PrintPageRenderer:pageRenderer];
[printController setPrintInfo:printInfo];
[printController设置PrintFormatter:viewFormatter];
[printController setShowsPageRange:是];
[printController presentFromRect:rect inView:view动画:是completionHandler:completionHandler];
}
我尝试通过实现UIPrintInteractionControllerDelegate方法来解决问题:

-(void)printInteractionController将呈现PrinterOptions:(UIPrintInteractionController*)printInteractionController
{
如果(可见){
[打印控制器:是];
}
}

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

}

presentFromFromBarButtonItem:animated:completionHandler:的使用可能是偶然的-相同的条件代码可用于该调用或原始presentFromRect:inView:animated:completionHandler调用。