在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

+1

如果它崩溃,那么也许你可以包含错误信息?还有一个让它崩溃的函数体? –

+0

@mag_zbc谢谢。我添加了它。 –

+0

和'invalidateLayout'的主体?无论如何,什么类是你的视图控制器,还是它是一个'UICollectionViewLayout'子类?你几乎没有提供任何东西,任何人都可以帮助你,你至少需要付出最少的努力。 –

尝试在collectionView调用reloadData()。在调用重新加载函数之前,请确保dataSource对于collectionView已经充满了数据(也许有一个地方可以强制打开一个值?)。

+0

谢谢。当我调用“collectionView?.reloadData()”时,它在重载行中崩溃。但是,如果dataSource没有准备好,为什么它可以在iOS 10中运行? –