2016-05-05 29 views
4

私は、コントローラに表示されていないコレクションビュー上viewDidDisppearの後にperformBatchUpdatesが原因でエラーが発生しましたか?

performBatchUpdates({ 
      self.insertItemsAtIndexPaths(indexPathes) 
      }, 
      completion: { 
       _ in 
     }) 

を呼び出しています!上にプッシュした別のビューコントローラが既に存在します。

これは、次のエラーが発生:

Invalid update: invalid number of items in section 0. The number of items contained in an existing section after the update (12) must be equal to the number of items contained in that section before the update (12), plus or minus the number of items inserted or deleted from that section (12 inserted, 0 deleted) and plus or minus the number of items moved into or out of that section (0 moved in, 0 moved out).' 

をしかしビューは、それは完璧に動作します表示されている間、私はperformBatchUpdatesを呼び出していますので、もしそれが全く真実ではありません。

何が起こったのですか?

編集: 私がreloadDataを呼び出すと、ビューが表示されていない間は正常に動作することに注意してください。それについてリンゴは何を言いますか?

どうすればこの例外をキャッチできますか。だから私はユーザーreloadData代わりにすることができますか?

EDIT: 私はperformBachUpdatesを呼び出す前に、次を印刷している:ここ

print("visibleCells().count :" + String(self.visibleCells().count)) 
print("dataModel count:" + String(self.dataArray.count)) 

は、私が得たものである:

visibleCells().count :0 
dataModel count:12 

例外では真実ではないことを意味!

+1

コレクションビューに挿入する項目に合わせてデータモデルを更新する必要があります。 – rmaddy

+0

@rmaddyあなたのcmmentに感謝します。 insetItemIndexPathを呼び出す前にデータモデルを更新しました。 – david

+0

@rmaddyこれは素晴らしい作業ですが、ビューコントローラが表示される必要があります! – david

答えて

1

@rmaddyはコメントに記載されているように、データモデルを正しく更新していないという問題があります。
indexPathes(12個のインデックスが含まれています)のinsertItemsAtIndexPathsを呼び出しますが、データモデルは12個のインデックスで始まり、バッチ更新後に12個のインデックスで終了します。たとえば、dataModel.insert("whatever", atIndex: 0)と同様のものを呼び出した後に、インデックス0のinsertItemsAtIndexPathsを呼び出すなど、データモデルに何かを挿入するときに挿入を呼び出すだけです。
あなたは同じ数の要素(12)で終わるので、ここではそうではないようです。この場合、コレクションビューを更新する場合はreloadDataに電話する必要があります(データが変更されない場合は何も呼び出さないでください)。

reloadDataは追加/削除されないため何でも、あなたがデータソースで提供するものを単に取得します。 insertItemsAtIndexPathsは変更をアニメートすることができるので、データモデル(データソースで提供するもの)が新しい要素を追加したかどうかを確認し、そうでない場合は例外をスローします。
@ try/catchを使用して例外をキャッチしても、アップデートが残ってしまい、それ以上の問題が発生するため、遠くには行きません。

+0

ありがとうございましたが、それは当てはまりません。私は質問を編集しました。あなたはdataModelが正しく埋め込まれていることがわかります – david

+0

'visibleCells'はあなたのデータモデルとは関係ありません。 'visibleCells'は常にデータモデルよりも<=ですが、0または3または12(12要素が画面に収まる限り)またはその間にあるものである可能性があります。重要なことは、アップデートを行う前に 'numberOfItemsInSection'が表示していることです(これは' collectionView(_ collectionView:UICollectionView、 numberOfItemsInSectionセクション:Int) 'で' UICollectionViewDataSource'を通して提供したものに基づいています) –

+0

alexi、私はあなたが努力してくれてありがとう – david

関連する問題