В SwiftUI метод представления OnDisappear не запускается в первый раз, когда различаемый источник данных применяется к UIOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 В SwiftUI метод представления OnDisappear не запускается в первый раз, когда различаемый источник данных применяется к U

Сообщение Anonymous »

Я работаю над приложением для iOS, используя как UITableViewDiffableDataSource, так и SwiftUI, и столкнулся с двумя отдельными, но загадочными проблемами:
UITableViewDiffableDataSource не использует повторно ячейки при первом применении после первоначального снимка. После первого применения он работает так, как ожидалось, со второго раза.
SwiftUI View внутри UITableViewCell onDisappear Не запускает первые изменения снимка после первоначального снимка. После этого onDispear вызывает, как и ожидалось.
С обычным UITableView он работает нормально.
Вызывает проблему — из-за этого проигрыватель и ячейки сильно сохраняют память.
Пример кода для воспроизведения с использованием diffable (DiffableTableViewExampleViewController) и нормальной работы без diffable (RegularTableViewExampleViewController)

Код: Выделить всё

  func appendNewItems() {

var snapshot = dataSource.snapshot()
snapshot.deleteItems(featuredItems.map { $0.id })
self.featuredItems = [
FeaturedItem(id: UUID(), title: "Featured Item 1", subtitle: "Subtitle 1")
].shuffled()

snapshot.appendItems(featuredItems.map { $0.id })
dataSource.apply(snapshot, animatingDifferences: true)
}

private func configureDataSource() {
dataSource = UITableViewDiffableDataSource(
tableView: tableView
) { tableView, indexPath, itemIdentifier in
if let featuredItem = self.featuredItems.first(where: { $0.id == itemIdentifier }) {
let cell =
tableView.dequeueReusableCell(withIdentifier: "FeaturedCell", for: indexPath)
as! FeaturedCell
cell.configure(with: featuredItem)
return cell
} else if let regularItem = self.regularItems.first(where: { $0.id == itemIdentifier }) {
let cell =
tableView.dequeueReusableCell(withIdentifier: "RegularCell", for: indexPath)
as! RegularCell
cell.configure(with: regularItem)
return cell
}
return UITableViewCell()
}
}

private func applyInitialSnapshot() {
var snapshot = NSDiffableDataSourceSnapshot()

featuredItems = [
FeaturedItem(id: UUID(), title: "Featured Item 1", subtitle: "Subtitle 1"),
]

snapshot.appendSections([.featured, .regular])
snapshot.appendItems(featuredItems.map { $0.id }, toSection: .featured)
dataSource.apply(snapshot, animatingDifferences: true)
}
}
полный код: https://gist.github.com/SURYAKANTSHARMA ... 00ba5aed17 Будем очень признательны за любые идеи или предложения по этим вопросам!
Заранее спасибо!

Подробнее здесь: https://stackoverflow.com/questions/793 ... r-the-firs
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «IOS»