Я использую библиотеку JTAppleCalendar в своем приложении. Неделю назад я столкнулся со странной проблемой, когда func calendar(_ calendar: JTAppleCalendarView, didSelectDate date: Date, cell: JTAppleCell?, cellState: CellState)
перестал работать в версии App Store, но это работало в текущей ветке разработчика.
После быстрого исследования я обнаружил, что единственное, что изменилось, это версии FBSDKCoreKit
и FBSDKLoginKit
cocoapods - 4.34.0
. Поэтому я решил обновить их версии до 4.38.1
, и это решило проблему.
К сожалению, я могу воспроизвести эту проблему только в моем проекте (коммерческом), в котором есть другие библиотеки, архитектура VIPER и по понятным причинам я не могу поделиться им.
Однако я не думаю, что стручки могут привести к такой проблеме, поэтому я пытаюсь выяснить, что может вызвать такую проблему. Через несколько часов я обнаружил, что delegate
из UICollectionView
равен нулю, и поэтому didSelectItemAt
не отвечает.
Я проверил это, просто поставив точку останова после
super.dataSource = self
super.delegate = self
в InternalActionFunctions.swift
файле и super.delegate
было nil
.
В файле JTAppleCalendarVariables.swift
я обнаружил, что автор сделал переменные delegate
и dataSource
закрытыми для следующего кода
@available(*, unavailable)
/// Will not be used by subclasses
open override var delegate: UICollectionViewDelegate? {
get { return super.delegate }
set { /* Do nothing */ }
}
@available(*, unavailable)
/// Will not be used by subclasses
open override var dataSource: UICollectionViewDataSource? {
get { return super.dataSource }
set {/* Do nothing */ }
}
Комментирование этого кода решает мою проблему, delegate
имеет назначенное значение, и все работает отлично.
Итак, мой вопрос: как приведенный выше код может привести к таким странным проблемам, когда в некоторых случаях метод didSelectItemAt
работает, а в других - нет? или, может быть, я нахожусь на неправильном пути, и это вообще не может быть причиной?