2016-02-15 6 views
5

を見つけていないと言います-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:666setCollectionViewLayoutがクラッシュにつながる使用して、私はコレクションビューを持っていると私は新しいレイアウトを設定dynamically.Onコレクションビューのレイアウトを変更する必要があり、ログとアプリケーションがクラッシュし、</p> <p>2016 layoutAttributesForItemAtIndexPathが

2016-02-15 13:47:31.666 PhotoBoard [92347:5235792] *キャッチされていない例外「NSInternalInconsistencyException」のためにアプリを終了しています、理由: -layoutAttributesForItemAtIndexPathにはUICollectionViewLayoutAttributesインスタンスない:{長さ= 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:目的:ファイル:行番号:説明:] + 198 4のUIKit 0x000000010ec4161c - [UICollectionViewData layoutAttributesForItemAtIndexPath:] + 627 5のUIKit 0x000000010ebeee24 - [UICollectionView _setCollectionViewLayout:アニメーション:isInteractive:完了:] + 1606 6のUIKit 0x000000010ebee4db - [UICollectionView setCollectionViewLayout:] + 318レイアウトを印刷する私は layoutAttributesForItemAtIndexPathための1つのレイアウト属性項目を参照して属性の

:{長さ= 2、パス0 = - 0}、Iは、内のエントリを参照してくださいレイアウトはなぜレイアウト属性が見つからないのかわかりません。

属性のインデックスパス:({length = 2、path = 0 - 0});フレーム=(6 293; 298 403.695);

アトリビュートインデックスパス:({length = 2、path = 0 - 1});フレーム=(6 293; 298 408.695);

アトリビュートインデックスパス:({length = 2、path = 0 - 2});フレーム=(6 293; 298 418.695);

アトリビュートインデックスパス:({length = 2、path = 0 - 3});フレーム=(6 293; 298 433.695);

アトリビュートインデックスパス:({length = 2、path = 0 - 4});フレーム=(6 293; 298 453.695);

アトリビュートインデックスパス:({length = 2、path = 0 - 5});フレーム=(6 293; 298 478.695);

アトリビュートインデックスパス:({length = 2、path = 0 - 6});フレーム=(6 293; 298 508.695);

アトリビュートインデックスパス:({length = 2、path = 0 - 7});フレーム=(6 293; 298 543.695);

アトリビュートインデックスパス:({length = 2、path = 0 - 8});フレーム=(6 293; 298 583.695);

アトリビュートインデックスパス:({length = 2、path = 0 - 9});フレーム=(6 293; 298 628.695);

アトリビュートインデックスパス:({length = 2、path = 0 - 10});フレーム=(6 293; 298 678.695);

アトリビュートインデックスパス:({length = 2、path = 0 - 11});フレーム=(6 293; 298 733。695)。

アトリビュートインデックスパス:({length = 2、path = 0 - 12});フレーム=(6 293; 298 793.695);

アトリビュートインデックスパス:({length = 2、path = 0 - 13});フレーム=(6 293; 298 858.695);

アトリビュートインデックスパス:({length = 2、path = 0 - 14});フレーム=(6 293; 298 928.695);

アトリビュートインデックスパス:({length = 2、path = 0 - 15});フレーム=(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() 

私は、彼らが正常に動作し、静的に2つのカスタムレイアウトをロードすると、クラッシュがレイアウトを動的に変更された場合にのみ発生します。

+0

移行のためにstartInteractiveTransitionToCollectionViewLayoutを使用して試行しましたが、同じ問題が発生しています。 –

+0

私は同じようになっています。これがどこから来ているのかわからない。見た目と修正方法の説明は素晴らしいでしょう。 – markhorrocks

答えて

3

私は同じ問題を抱えていました。これが私の問題を解決します。

あなたは両方のカスタムレイアウトクラスの次のメソッドをオーバーライドし、その後、スイッチングのために複数のカスタムレイアウトを使用している場合は、

- (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect 
- (UICollectionViewLayoutAttributes *)layoutAttributesForItemAtIndexPath:(NSIndexPath *)indexPath 

スウィフトの例:

override func layoutAttributesForItem(at indexPath: IndexPath) -> UICollectionViewLayoutAttributes? { 
    return cache[indexPath.item] 
} 

のObjective Cの例:

- (UICollectionViewLayoutAttributes *)layoutAttributesForItemAtIndexPath:(NSIndexPath *)indexPath 
{ 
    return self.cache[indexPath.item]; 
} 

ハッピーコーディング..!