2017-08-29 87 views
0

我想每分鐘更新UICollectionView佈局。它在iOS 10中運行良好,但在iOS 9中崩潰(我在iPad 2中測試過)
invalidateLayout方法使UICollectionView更新。並調用此方法時崩潰。在iOS 9中調用invalidateLayout方法時應用程序崩潰

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 ---------------- 
    } 

錯誤:

Thread 1: EXC_BAD_ACCESS

+1

如果它崩潰,那麼也許你可以包含錯誤信息?還有一個讓它崩潰的函數體? –

+0

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

+0

和'invalidateLayout'的主體?無論如何,什麼類是你的視圖控制器,還是它是一個'UICollectionViewLayout'子類?你幾乎沒有提供任何東西,任何人都可以幫助你,你至少需要付出最少的努力。 –

回答

0

嘗試在collectionView調用reloadData()。在調用重新加載函數之前,請確保dataSource對於collectionView已經充滿了數據(也許有一個地方可以強制打開一個值?)。

+0

謝謝。當我調用「collectionView?.reloadData()」時,它在重載行中崩潰。但是,如果dataSource沒有準備好,爲什麼它可以在iOS 10中運行? –

相關問題