2010-10-13 186 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]