iOSエンジニアのつぶやき

毎朝8:30に iOS 関連の技術について1つぶやいています。まれに釣りについてつぶやく可能性があります。

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Fatal: supplied identifiers are not unique.' 対処法

UICollectionViewDiffableDataSourceをつかっていた際にタイトルのエラーが発生したので、対処法をかるくメモ🔰

今回エラーが発生したのは、セクションの情報を追加するときの処理です。

        var snapshot = dataSource.snapshot()
        snapshot.appendSections(newSections)
        newSections.forEach {
            switch $0 {
            case .largeItem(let item, _):
                snapshot.appendItems([item], toSection: $0)
            case .smallItems(let items, _):
                snapshot.appendItems(items, toSection: $0)
            }
        }
        dataSource.apply(snapshot, animatingDifferences: false)

結論

データをリフレッシュするのではなく、追加する時はsnapshot.appendSections(newSections)で、差分のデータだけ含めるようにしましょう。DifferenceKitとかの要領でデータを全て追加してしまっていたので、同じhashvalueを持つデータがsnapshotで重複してしまい今回のエラーが発生していました👀

ちなみに、リフレッシュする時はsnapshot.deleteAllItems()してから、データ追加するとうまくいきます。

てな感じ本日も以上となります🍺

その他の記事

yamatooo.blog

yamatooo.blog

yamatooo.blog