Swift не может печатать из NSView "CGContextGetCTM: недопустимый контекст 0x0" - PullRequest
0 голосов
/ 09 ноября 2018

Сейчас я делаю приложение для MacOS и пытаюсь поддерживать печать. Я добавил NSBox для представления страниц, которые я хочу распечатать внутри NSScrollView, поэтому иерархия выглядит следующим образом

NSScrollView
|- NSDocumentView
   |- NSBox
   |- NSBox

Print Preview

В ViewController, когда пользователь нажимает на печать, я запускаю следующий код

let printOperation = NSPrintOperation(view: self.previewView, printInfo: printInfo)

if let window = self.view.window {
    printOperation.runModal(for: window, delegate: self, didRun: #selector(PrintPreviewViewController.printOperationDidRun(_:success:contextInfo:)), contextInfo: nil)
}

В подклассе NSDocumentView я реализовал

override func knowsPageRange(_ range: NSRangePointer) -> Bool {

    var numberOfPages = 0

    for i in 0..<pages.count {
        numberOfPages += pages[i].count
    }

    range.pointee.location = 1
    range.pointee.length = numberOfPages

    return true
}

override func rectForPage(_ page: Int) -> NSRect {

    var pageNumber = 1

    for i in 0..<pages.count {
        for j in 0..<pages[i].count {

            if pageNumber == page {
                return pages[i][j].frame
            }
            pageNumber += 1
        }
    }

    return NSRect(x: 0, y: 0, width: 300, height: 300)

}

Когда я бегу, я вижу распечатанный лист, который выглядит правильно.

Print sheet

Но когда я, наконец, подтверждаю печать, я получаю эти ошибки в консоли и чистый лист.

CGContextGetCTM: invalid context 0x0
CGContextTranslateCTM: invalid context 0x0

Я не знаю, что это значит, так как все отображается правильно в NSScrollView и даже в предварительном просмотре. Я попытался сузить проблему, я попытался сделать пустой проект с одним NSBox внутри NSScrollView, и у меня возникла та же проблема. Я попытался изменить размер NSRect Bering, возвращенный в rectForPage (), но ничего не работает. У меня нет идей.

Спасибо всем заранее.

...