我在我的应用程序中使用JTAppleCalendar库。func calendar(_ calendar: JTAppleCalendarView, didSelectDate date: Date, cell: JTAppleCell?, cellState: CellState)一周前,当我停止在 App Store 版本中工作但它在当前的开发分支中工作时,我遇到了一个奇怪的问题。
经过快速研究,我发现唯一改变的是FBSDKCoreKit和FBSDKLoginKitcocoapods 版本 - 4.34.0。所以我决定更新他们的版本4.38.1并解决了一个问题。
不幸的是,我只能在具有其他库、VIPER 架构的项目(这是商业项目)中重现此问题,并且出于明显的原因我无法分享它。
但是我不认为豆荚会导致这样的问题,所以我正在尝试调查可能导致此类问题的原因。几个小时后,我发现delegateofUICollectionView为零,这就是为什么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?或者也许我走错了路,这根本不是理由?