Diffable 데이터 소스와 함께 핵심 데이터를 사용하는 방법 - 최소한의 예
Core Data와 함께 이 이전 설정을 사용한다는 것은 대부분의 경우
NSFetchedResultsController
데이터 콘텐츠가 변경되고 그에 따라 테이블/컬렉션 보기를 업데이트해야 하는 시기를 알려주는 대리자의 구현을 의미합니다.Diffable 데이터 소스는 이것을 훨씬 쉽게 만듭니다. 그러나 또한 프로세스가 완전히 다르며 익숙해지기가 약간 어려울 수 있습니다.
Core Data를 사용하여 새 프로젝트에서 Diffable 설정 속도를 높이기 위해 나와 다른 사람을 위해 이 짧은 예제를 작성하고 있습니다. 결과는 초기 컬렉션 보기를 작동시키는 세 가지 더 짧은 방법입니다.
이 예에서는
UICollectionView
를 사용하고 있지만 UITableView
는 기본적으로 동일합니다.참고: 내 예제의 프로젝트 대체
Model
클래스에서 고유한 핵심 데이터 엔터티로 대체하십시오.속성 선언부터 시작하겠습니다.
var datasource: UICollectionViewDiffableDataSource<Int, Model>!
var fetchedResultsController: NSFetchedResultsController<Model>!
참고:
UITableView
의 경우 UITableViewDiffableDataSource
를 사용합니다. 섹션에 대한 유형이 필요하므로 Int
가 사용됩니다. 하나만 있으면 Int
, String
를 사용한 다음 "0"또는 빈 문자열을 전달할 수 있습니다.UICollectionViewDiffableDataSource 구성
다음으로
datasource
를 다음과 같이 구성합니다.func configureDatasource() {
datasource = UICollectionViewDiffableDataSource(collectionView: collectionView, cellProvider: { (collectionView, indexPath, scan) -> UICollectionViewCell? in
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "ModelCell", for: indexPath) as! ModelCell
cell.configure(with: model)
return cell
})
}
UICollectionViewDiffableDataSource
의 인스턴스를 생성하기만 하면 됩니다. 이전collectionView
방법의 최신 버전인 우리cellProvider
와 구성cellForRowAt
을 제공합니다.이것은 우리가 전달할 수 있는 별도의 방법일 수 있습니다. 이것은 하나의 예이고 저는 인라인 버전을 사용하고 있습니다.
NSFetchedResultsController
구성 시간
NSFetchedResultsController
:func initFetchedResultsController() {
fetchedResultsController = NSFetchedResultsController(fetchRequest: Model.sortedFetchRequest, managedObjectContext: Database.shared.context, sectionNameKeyPath: nil, cacheName: nil)
fetchedResultsController.delegate = self
try! fetchedResultsController.performFetch()
}
애니메이션 변경
그리고 거의 마지막 단계로 데이터가 변경될 때
collectionView
를 업데이트하는 메서드를 구현해야 합니다.func controller(_ controller: NSFetchedResultsController<NSFetchRequestResult>, didChangeContentWith snapshot: NSDiffableDataSourceSnapshotReference) {
var diffableDataSourceSnapshot = NSDiffableDataSourceSnapshot<Int, Model>()
diffableDataSourceSnapshot.appendSections([0])
diffableDataSourceSnapshot.appendItems(fetchedResultsController.fetchedObjects ?? [])
datasource?.apply(diffableDataSourceSnapshot, animatingDifferences: view.window != nil)
}
마지막으로
viewDidLoad
에서 이러한 메서드를 호출해야 합니다.override func viewDidLoad() {
super.viewDidLoad()
configureDatasource()
initFetchedResultsController()
}
물론 이 솔루션은 완벽하지 않으며 의도된 것도 아닙니다. 내 목표는 원하는 대로 조정할 수 있는 가장 간단한 작업 예제를 보여 주는 것이었습니다.
여기와 내 블로그에 iOS/Swift에 대해 씁니다nemecek.be.
Reference
이 문제에 관하여(Diffable 데이터 소스와 함께 핵심 데이터를 사용하는 방법 - 최소한의 예), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/nemecek_f/minimal-example-of-using-diffable-data-source-with-core-data-19hn텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)