在iOS 9中调用invalidateLayout方法时应用程序崩溃
问题描述:
我想每分钟更新UICollectionView
布局。它在iOS 10中运行良好,但在iOS 9中崩溃(我在iPad 2中测试过)invalidateLayout
方法使UICollectionView
更新。并调用此方法时崩溃。在iOS 9中调用invalidateLayout方法时应用程序崩溃
override init() {
super.init()
initiali*uteTick()
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
deinit {
minuteTimer?.invalidate()
}
private func initiali*uteTick() {
guard let validDate = Date().addMinute(num: 1) else { return }
minuteTimer = Timer(fireAt: validDate, interval: TimeInterval(60), target: self, selector: #selector(minuteTick), userInfo: nil, repeats: true)
if let minuteTimer = minuteTimer {
RunLoop.current.add(minuteTimer, forMode: .defaultRunLoopMode)
}
}
func minuteTick() {
cachedCurrentTimeComponents.removeAll()
// CRASH ----------------
invalidateLayout()
// CRASH ----------------
}
错误:
Thread 1: EXC_BAD_ACCESS
答
尝试在collectionView
调用reloadData()
。在调用重新加载函数之前,请确保dataSource
对于collectionView
已经充满了数据(也许有一个地方可以强制打开一个值?)。
+0
谢谢。当我调用“collectionView?.reloadData()”时,它在重载行中崩溃。但是,如果dataSource没有准备好,为什么它可以在iOS 10中运行? –
如果它崩溃,那么也许你可以包含错误信息?还有一个让它崩溃的函数体? –
@mag_zbc谢谢。我添加了它。 –
和'invalidateLayout'的主体?无论如何,什么类是你的视图控制器,还是它是一个'UICollectionViewLayout'子类?你几乎没有提供任何东西,任何人都可以帮助你,你至少需要付出最少的努力。 –