У меня есть UICollectionView
, представляющий календарь, с данными за 13 месяцев, сгенерированными под нагрузкой, и раздел для каждого месяца.В пользовательском интерфейсе есть кнопка для переключения между текущим и следующим годом, но при прокрутке от конца коллекции к началу текущего года происходит сбой приложения со следующей ошибкой.
'NSRangeException', reason: '*** -[__NSArrayM objectAtIndexedSubscript:]: index 9223372036854775806 beyond bounds [0 .. 4]'
Это метод, вызывающий ошибку.
public func scrollTo(year: Int) {
if let month = months.firstIndex(where: { $0.components.year == year }),
let attributes = collectionView.layoutAttributesForSupplementaryElement(ofKind: UICollectionElementKindSectionHeader, at: IndexPath(item: 0, section: month)){
let y = attributes.frame.origin.y - collectionView.contentInset.top
// This is the line causing the error
collectionView.setContentOffset(CGPoint(x: 0, y: y), animated: true)
}
}
Я пытался распечатать вычисленное значение y
, но оно было 0
при каждом сбое.
Возможно, стоит отметить, что индекс, упомянутый в исключении, равен Int.max - 1
, хотя, учитывая, что y
является CGFloat
, я не уверен, насколько это актуально.