2

我有一个应用程序在我调用 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:. 如何设置它以使其必须位于单独的线程中,从而不会弄乱应用程序的常规流程?

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

4

1 回答 1

0

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

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

于 2012-06-15T21:39:45.707 回答