2010-10-13 134 views
2

我有一个应用程序在我打电话给NSPrintOperation时挂起。NSPrintOperation挂起应用程序

我有一个观点,即是创建一个单独的类(UIView的)是这样的:

PBPrintImage *printImage = [[PBPrintImage alloc] init]; 
printImage.image = finalImage; 
[printImage printWithNoPanel:self]; 
内PBPrintImage

然后,我有以下方法:

- (void)printWithNoPanel:(id)sender { 
    CGSize picSize = CGSizeMake(300, 446); 
    NSPrintInfo *printInfo = [NSPrintInfo sharedPrintInfo]; 

    NSRect imageRect = NSRectFromCGRect(CGRectMake(0, 0, picSize.width, picSize.height)); 
    NSImageView *imageView = [[NSImageView alloc] initWithFrame:imageRect]; 
    [imageView setImage:image]; 

    NSPrintOperation *op = [NSPrintOperation printOperationWithView:imageView printInfo:printInfo]; 
    [op setCanSpawnSeparateThread:YES]; 
    [op setShowsPrintPanel:NO]; 
    [op runOperation]; 
} 

如果我不把它该应用程序按照怀疑工作。我试着用和不用setCanSpawnSeparateThread:来调用它。我如何设置它,因此它必须位于单独的线程中,因此不会弄乱应用程序的正常流程?

它确实打印,但这只是工作的一半。

回答

0

应用程序应该显示一个模态打印对话框(并启动一个模态运行循环),所以我不会称之为“挂起”。只要您点击Ok或Cancel,它就会返回到正常的主线程流程。

至于setCanSpawnSeparateThread:问题,它只会在打印对话框显示为工作表时出现,因此您需要像这样调用它:`[op runOperationModalForWindow:window delegate:self didRunSelector:@selector(_printOperationDidRun:success :contextInfo :) contextInfo:nil]