2014-12-02 1 views
2

Я пытаюсь использовать [UIPrintPageRenderer drawPageAtIndex: inRect:], чтобы преобразовать четыре webViews в pdf. Однако в iOS 8.1.1 он зависает, когда он достигает этой точки. Нет сообщений об ошибках, и код продолжает прерываться, если я попытаюсь продолжить. Кто-нибудь еще видел эту проблему и нашел способ решить эту проблему?drawPageAtIndex зависает в iOS 8.1.1

Когда я устанавливаю paperRect и printableRect на рендерере, он вызывает зависание. Если я оставлю эти строки, приложение не зависает, но полученный pdf-файл пуст.

Вот код (обновлено):

int i = 0; 
UIPrintPageRenderer *renderer = [[UIPrintPageRenderer alloc] init]; 
for(UIWebView *webView in webViews) { 
    [renderer addPrintFormatter:webView.viewPrintFormatter startingAtPageAtIndex:i++]; 
} 
CGRect paperRect = CGRectMake(0, 0, 612, 792); 
CGRect printableRect = CGRectInset(paperRect, 20, 20); 
[renderer setValue:[NSValue valueWithCGRect:paperRect] forKey:@"paperRect"]; 
[renderer setValue:[NSValue valueWithCGRect:printableRect] forKey:@"printableRect"]; 

NSMutableData *pdfData = [NSMutableData data]; 
// Render the html into a PDF 
UIGraphicsBeginPDFContextToData(pdfData, CGRectZero, nil); 
for (NSInteger i=0; i < [renderer numberOfPages]; i++) 
{ 
    UIGraphicsBeginPDFPage(); 
    CGRect bounds = UIGraphicsGetPDFContextBounds(); 
    [renderer drawPageAtIndex:i inRect:bounds]; <-- Hangs here 
} 
UIGraphicsEndPDFContext(); 
+0

Ого, да, это так ... Вы пытаетесь выполнить довольно интенсивную функцию на основном потоке в узкой петле. Вместо этого попробуйте использовать NSOperationQueue. –

+0

Я обновил код выше. Вышеприведенный код отлично работает в iOS 7.1. В iOS 8.1 код зависает. Если я удалю вызовы для установки paperRect и printableRect на рендерере, код не будет висеть в iOS 8.1, но полученный pdf-файл будет пустым. – DCG

ответ

4

Я отправляю это для всех, кто может столкнуться с этой проблемой. Это зависание произошло из-за того, что в Xcode были включены контрольные точки исключения, и произошло исключение. Исключение, по-видимому, имело место в реализации [UIPrintPageRenderer drawPageAtIndex: inRect:]. Вы можете игнорировать это исключение, и код будет продолжен, как ожидалось.

+0

Ничего себе, какое облегчение, это должно было убить PDF-рендеринг для меня :-) – WrightsCS