NSPrintOperation зависает приложение - PullRequest
2 голосов
/ 13 октября 2010

У меня есть приложение, которое зависает всякий раз, когда я вызываю 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:. Как мне настроить его так, чтобы он был в отдельном потоке и, следовательно, не мешал регулярному потоку приложения?

Он печатает, но это только половина работы.

1 Ответ

0 голосов
/ 16 июня 2012

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

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

...