Дифференцируемый источник данных должен быть объявлен с универсальными типами String и NSManagedObjectID. Теперь вы можете привести ссылку на снимок:
func controller(_ controller: NSFetchedResultsController<NSFetchRequestResult>, didChangeContentWith snapshot: NSDiffableDataSourceSnapshotReference) {
let snapshot = snapshot as NSDiffableDataSourceSnapshot<String,NSManagedObjectID>
self.ds.apply(snapshot, animatingDifferences: false)
}
Это оставляет открытым вопрос о том, как вы собираетесь заполнять ячейку. В источнике данных с возможностью преобразования (self.ds
в моем примере), когда вы заполняете ячейку, возвращаетесь в контроллер извлеченных результатов и извлекаете фактический объект данных.
Например, в моем табличном представлении я отображаюname
группы в каждой ячейке:
lazy var ds : UITableViewDiffableDataSource<String,NSManagedObjectID> = {
UITableViewDiffableDataSource(tableView: self.tableView) {
tv,ip,id in
let cell = tv.dequeueReusableCell(withIdentifier: self.cellID, for: ip)
cell.accessoryType = .disclosureIndicator
let group = self.frc.object(at: ip)
cell.textLabel!.text = group.name
return cell
}
}()