Я не понимаю, что именно происходит, но у меня была такая же проблема, и фиксировали его
1) обеспечение того, чтобы логика в моих переопределяет это выполняется на UI потоке
2) шевелить AddPrintFormatter вызов метода конструктора вместо вызова из переопределения NumberOfPages (что позволило мне удалить это свойство переопределения).
Похоже, что при переопределении UIPrintPageRenderer (по крайней мере, в реализации Xamarin) существует какое-то странное поведение потоков.
Например, добавление этого простого переопределения вызывает ошибку UIKit непротиворечивости для меня:
public override nint NumberOfPages
{
get
{
return base.NumberOfPages;
}
}
Таким образом, кажется базовый метод начинает выполнение в потоке пользовательского интерфейса, когда не переопределение, но переопределения подкласса начинает выполнение на рабочем потоке.
Документ iOS9 SDK Заметки о выпуске говорит:.
«Приложение, подклассы UIPrintPageRenderer или UIPrintFormatter сделать содержание для печати должно быть построено с SDK IOS 9 для предварительного просмотра, чтобы отобразить поведение UIPrintPageRenderer обновлено до call drawPageAtIndex: inRect: несколько раз с потенциально разными размерами страниц и полями. Различные методы в UIPrintPageRenderer можно вызывать из не основного потока, но не из нескольких потоков одновременно ».
Существует множество причин, по которым это может произойти. См. Мой длинный ответ с полным примером здесь: http://stackoverflow.com/questions/5060855/printing-contents-of-multiple-uiwebviews-in-one-go/35769422#35769422 –