# #ios #swift #firebase #uicollectionview #crashlytics
Вопрос:
Я получаю одну аварию в Crashlytics, и тип аварии таков EXC_BREAKPOINT
. Это сбой при sizeForItemAt indexpath
просмотре метода сбора. Я не могу упрекнуть в аварии, и это происходит в основном на iPad. Похоже, сбой произошел из-за какой-то проблемы с компоновкой при изменении ориентации. Ниже приведена трассировка стека из firebase: —
Разбился: com.apple.основная тема
0 Module1 0x10587bb78 specialized TabViewController.collectionView(_:layout:sizeForItemAt:) 227 (TabViewController.swift:227)
1 Module1 0x1058799a8 @objc TabViewController.collectionView(_:layout:sizeForItemAt:) 4892 (<compiler-generated>:4892)
2 UIKitCore 0x1a7c288f0 -[UICollectionViewFlowLayout _getSizingInfosWithExistingSizingDictionary:] 2548
3 UIKitCore 0x1a7c29eb4 -[UICollectionViewFlowLayout _fetchItemsInfoForRect:] 280
4 UIKitCore 0x1a7c23d30 -[UICollectionViewFlowLayout prepareLayout] 224
5 UIKitCore 0x1a7c1d594 -[UICollectionViewData _prepareToLoadData] 276
6 UIKitCore 0x1a7c1ddb4 -[UICollectionViewData validateLayoutInRect:] 108
7 UIKitCore 0x1a7be76e8 -[UICollectionView layoutSubviews] 228
8 UIKitCore 0x1a8a1aa0c -[UIView(CALayerDelegate) layoutSublayersOfLayer:] 2576
9 QuartzCore 0x1a8ea1670 -[CALayer layoutSublayers] 308
10 QuartzCore 0x1a8ea1b54 CA::Layer::layout_if_needed(CA::Transaction*) 548
11 QuartzCore 0x1a8eb678c CA::Layer::layout_and_display_if_needed(CA::Transaction*) 144
12 QuartzCore 0x1a8df85e4 CA::Context::commit_transaction(CA::Transaction*, double, double*) 500
13 QuartzCore 0x1a8e247f4 CA::Transaction::commit() 684
14 UIKitCore 0x1a84e9554 __83-[UIApplication _createSnapshotContextForScene:withName:performLayoutWithSettings:]_block_invoke_4 48
15 UIKitCore 0x1a84e890c -[UIApplication _performWithUICACommitStateSnapshotting:] 148
16 UIKitCore 0x1a84e9488 __83-[UIApplication _createSnapshotContextForScene:withName:performLayoutWithSettings:]_block_invoke_2 604
17 UIKitCore 0x1a8a0d920 [UIView(Animation) performWithoutAnimation:] 104
18 UIKitCore 0x1a84e91f8 __83-[UIApplication _createSnapshotContextForScene:withName:performLayoutWithSettings:]_block_invoke 228
19 UIKitCore 0x1a79603ec -[UIScene _applyOverrideSettings:forActions:] 124
20 UIKitCore 0x1a875c814 -[UIWindowScene _applySnapshotSettings:forActions:] 48
Может кто-нибудь подсказать, в чем может быть причина аварии? Должны ли мы проверить, должно ли dataSource
количество быть больше, чем indexpath.item
в методах делегирования?
Комментарии:
1. Возможно, при изменении ориентации в активную часть представления коллекции загружается больше элементов. Когда вы попытались воспроизвести ошибку, вы прокрутили до нижней части представления коллекции, а затем изменили ориентацию? Вы уверены, что у них есть связанная модель для каждой ячейки в представлении коллекции? По моему опыту, эти ошибки в основном возникают из-за того, что ячейки создаются для индексов, которые находятся вне диапазона.
2. @jacob_g проблема не воспроизводима, когда я прокручиваю страницу вниз, а затем меняю ориентацию. Да, для каждой ячейки в представлении коллекции есть модель, связанная с ней. Не удалось определить сценарий сбоя, но из журналов видно, что он в основном имеет ландшафтную ориентацию. У меня есть один вопрос здесь, должны ли мы добавить проверку для представления коллекции
dataSource array count > indexPath.item
, даже если мы уверены, что условие будет истинным.3. Я бы добавил ведение журнала в функцию, выводя все, что вы можете, чтобы понять, в чем причина проблемы, включая информацию об источнике данных и indexPath