2010-10-13 2 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

Приложение должно отображать модальный диалог печати (и запускать цикл модального запуска), поэтому я бы не назвал его «повешенным». Он возвращается к нормальному потоку основного потока, как только вы нажмете «ОК» или «Отмена».

Что касается setCanSpawnSeparateThread: вопроса, это только в кайф, когда диалоговое окно печати отображается в виде листа, так что вы должны назвать его так: `[цит runOperationModalForWindow: окна делегата: самостоятельная didRunSelector: @selector (_printOperationDidRun: успех : contextInfo :) contextInfo: nil]

Смежные вопросы