Я имею коллекцию просмотры, и я должен изменить макет вида коллекции, устанавливающий новую компоновку, сбой приложения с журналом dynamically.On,Использование setCollectionViewLayout приводит к сбою, говорит layoutAttributesForItemAtIndexPath не найден
2016 -02-15 13: 47: 31.663 PhotoBoard [92347: 5235792] *** Ошибка утверждения в - [UICollectionViewData layoutAttributesForItemAtIndexPath:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit_Sim/UIKit-3512.30.14 /UICollectionViewData.m:666
2016-02-15 13: 47: 31.666 PhotoBoard [92347: 5235792] * Завершение приложения из-за неперехваченного исключения «NSInternalInconsistencyException», причина: нет экземпляра UICollectionViewLayoutAttributes для -layoutAttributesForItemAtIndexPath {длина = 2, путь = 0 - 0}» * Первого стек вызовов броска: ( 0 CoreFoundation 0x000000010d94de65 __exceptionPreprocess + 165 1 libobjc.A.dylib 0x000000010f8b5deb objc_exception_throw + 48 2 CoreFoundation 0x000000010d94dcca + [NSException поднимают: формат: аргументы:] + 106 3 Фундамент 0x000000010dfbe4de - [NSAssertionHandler handleFailureInMethod: объект: файл: LineNumber: описание:] + 198 4 UIKit 0x000000010ec4161c - [UICollectionViewData layoutAttributesForItemAtIndexPath:] + 627 5 UIKit 0x000000010ebeee24 - [UICollectionView _setCollectionViewLayout: анимированный: isInteractive: завершение:]6 UIKit 0x000000010ebee4db - [UICollectionView setCollectionViewLayout:] + 318
На печать макета атрибуты я вижу элемент атрибута один макет для layoutAttributesForItemAtIndexPath: {длина = 2, путь = 0 - 0}», я вижу запись в макет, поэтому не уверен, почему атрибут макета не найден,
Атрибут path path: ({length = 2, path = 0 - 0}); frame = (6 293; 298 403,695);
Путь указателей атрибутов: ({длина = 2, путь = 0 - 1}); frame = (6 293; 298 408,695);
Путь указателей атрибутов: ({длина = 2, путь = 0 - 2}); frame = (6 293; 298 418,695);
Путь указателей атрибутов: ({длина = 2, путь = 0 - 3}); frame = (6 293; 298 433,695);
Путь указателей атрибутов: ({длина = 2, путь = 0 - 4}); frame = (6 293; 298 453,695);
Путь указателей атрибутов: ({длина = 2, путь = 0 - 5}); frame = (6 293; 298 478,695);
Путь указателей атрибутов: ({длина = 2, путь = 0 - 6}); frame = (6 293; 298 508,695);
Путь указателей атрибутов: ({длина = 2, путь = 0 - 7}); frame = (6 293; 298 543,695);
Путь указателей атрибутов: ({длина = 2, путь = 0 - 8}); frame = (6 293; 298 583,695);
Путь указателей атрибутов: ({длина = 2, путь = 0 - 9}); frame = (6 293; 298 628,695);
Путь указателей атрибутов: ({длина = 2, путь = 0 - 10}); frame = (6 293; 298 678,695);
Путь указателей атрибутов: ({длина = 2, путь = 0 - 11}); frame = (6 293; 298 733.695);
Путь указателей атрибутов: ({длина = 2, путь = 0 - 12}); frame = (6 293; 298 793,695);
Путь указателей атрибутов: ({длина = 2, путь = 0 - 13}); frame = (6 293; 298 858,695);
Путь указателей атрибутов: ({длина = 2, путь = 0 - 14}); frame = (6 293; 298 928,695);
Путь указателей атрибутов: ({длина = 2, путь = 0 - 15}); frame = (6 293; 298 1003,69);
Это, как я устанавливаю новый пользовательский макет,
self.collectionView!.collectionViewLayout = self.stackLayout
self.stackLayout.delegate = self
self.collectionView!.collectionViewLayout.invalidateLayout()
self.collectionView!.setCollectionViewLayout(self.stackLayout, animated:true)
self.collectionView?.reloadData()
Если я загрузить два пользовательских макетов статически они работают нормально, авария происходит только тогда, когда раскладка меняется динамически.
Пробовал использовать startInteractiveTransitionToCollectionViewLayout для перехода, эта же проблема происходит. –
Я получаю то же самое. Я не могу найти код, откуда это происходит. Объяснение того, где искать и как исправить, было бы замечательно. – markhorrocks