Нераспознанный селектор отправляется на экземпляр при добавлении наблюдателя в PDFView - PullRequest
0 голосов
/ 29 апреля 2019

Я пытаюсь внести некоторые изменения в пользовательский интерфейс, когда пользователь перемещается на следующую или предыдущую страницу в PDFView. Я настроил его на использование PageViewController по умолчанию. Я добавляю наблюдателя в PDFView и у меня настроен селектор для него. Он падает, когда я пытаюсь смахивать, и сообщение об ошибке таково:

-[PDFView handlePageChangedWithNotification:] unrecognized selector sent to instance
...
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[PDFView handlePageChangedWithNotification:]: unrecognized selector to instance.

Я проверил метод делегата и не нашел ничего, что помогло бы выполнить эту функцию. Итак, я предполагаю, что мне нужно правильно назвать его, чтобы это работало. Вот код, который я использую для добавления наблюдателя:

// Add observer to pdfView
// This is added in viewDidAppear()
NotificationCenter.default.addObserver(pdfView, selector #selector(handlePageChange(view:)), name: .PDFViewPageChanged, object: nil)

// Selector method for observer
@objc private func handlePageChange(view: PDFView)
{
     // Do some changes
}

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

РЕДАКТИРОВАТЬ: я проверил документацию для уведомления PDFViewPageChanged, и он говорит, что объект уведомления является сам PDFView. Это все еще терпит крах, но я предполагаю, что это - одна проблема. Я изменил его в приведенном выше примере кода на то, что у меня сейчас.

1 Ответ

1 голос
/ 29 апреля 2019

Вы говорите центру уведомлений уведомлять PDFView о срабатывании уведомления.PDFView не реализует этот метод.В каком бы классе вы ни написали метод, он должен обрабатывать уведомление.Итак:

NotificationCenter.default.addObserver(self, selector #selector(handlePageChange(view:)), name: .PDFViewPageChanged, object: nil)

Кроме того, ваш метод обработчика уведомлений имеет неверную подпись.Центр уведомлений передает уведомление методу, а не фактическому представлению, поэтому вы бы хотели, чтобы оно было

@objc private func handlePageChange(notification: Notification)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...