在iOS 9中调用invalidateLayout方法时,应用程序崩溃

时间:2017-08-29 07:30:01

标签: ios swift uicollectionview

我想每分钟更新一次UICollectionView布局。它在iOS 10中运行良好但在iOS 9中崩溃(我在iPad 2中测试过) invalidateLayout方法会使UICollectionView更新。并且在调用此方法时崩溃。

    override init() {
        super.init()
        initializeMinuteTick()
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

    deinit {
        minuteTimer?.invalidate()
    }

    private func initializeMinuteTick() {
        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 ----------------
    }

错误:

  

主题1:EXC_BAD_ACCESS

1 个答案:

答案 0 :(得分:0)

尝试在reloadData()上致电collectionView。在调用重新加载函数之前,还要确保dataSource的{​​{1}}已经填充了数据(也许有一个地方强制解包值?)。