问题标签 [uicollectionviewdiffabledatasource]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ios - 为什么 UICollectionViewDiffableDataSource 在没有任何变化的情况下重新加载每个单元格?
我创建了以下演示视图控制器,以在一个最小示例中重现该问题。
在这里,我使用 UICollectionViewDiffableDataSource 将相同数据的快照重复应用于相同的集合视图,并且每次重新加载所有单元格时,即使没有任何更改。
我想知道这是否是一个错误,或者我是否“持有错误”。
看起来这个其他用户也有同样的问题,尽管他们没有提供足够的信息来准确地重现错误: iOS UICollectionViewDiffableDataSource reloads all data without changes
编辑:我还发现了一个奇怪的行为 - 如果动画差异是true
,则单元格不会每次都重新加载。
swift - 数据未在 collectionView DiffableDataSource MVVM RxSwift 中显示
我正在学习 MVVM 和 RxSwift,我想显示来自 GitHub api 的数据并填充到 collectionViewDiffableDataSource 中。但它没有显示我的数据,即使我的快照已经设置为接受我的数据。这是我的代码
我不知道为什么,但这就像我的快照没有被调用,在 MVVM 中使用时似乎有所不同
ios - 为什么在使用 CoreData、NSFetchedResultsController 和 Diffable 数据源时需要 DispatchQueue.main.async
在处理 CoreData、NSFetchedResultsController 和 Diffable 数据源时,我总是注意到我需要应用DispatchQueue.main.async
.
例如,
在应用 DispatchQueue.main.async 之前
但是,在我们运行performFetch
后viewDidLoad
,我会收到以下错误dataSource.apply
'检测到死锁:不允许在未完成异步更新的主队列上调用此方法,并且会死锁。请始终在主队列上或始终在主队列外提交更新
我可以使用以下方法“解决”问题
应用 DispatchQueue.main.async 后
之后一切正常。
但是,我们对为什么DispatchQueue.main.async
需要它感到困惑,因为
performFetch
在主线程中运行。- 回调
didChangeContentWith
在主线程中运行。 NSFetchedResultsController
正在使用主 CoreData 上下文,而不是背景上下文。
DispatchQueue.main.async
因此,如果不使用,我们无法理解为什么会出现运行时错误。
你知道为什么在使用 CoreData、NSFetchedResultsController 和 Diffable 数据源时需要 DispatchQueue.main.async 吗?
以下是我们的详细代码片段。
CoreDataStack.swift
NoteViewController.swift
NSTabInfoProvider.swift
swift - 如何使用 diffabledatasource 更新领域?
我是领域的新手,正在尝试使用UICollectionViewDiffableDataSource
. 但是,我发现在插入/删除新对象后很难更新数据源。我试图更新,NotificationToken
但它崩溃了。这是我到目前为止尝试过的代码:
非常感谢您对此提供的帮助。谢谢!
ios - UICollectionViewDiffableDataSource 闭包中的参数来自哪里?
无法理解 中的闭包UICollectionViewDiffableDataSource
,尤其是传递给它的内容。我能找到的所有教程都解释了要输入什么而不是为什么,而且我对 Swift 和编程还是有点陌生。
我正在关注 Paul Hudson 的教程(他正在制作一个由App
对象组成的应用商店),并在其中createDataSource()
写道:
我对闭包参数的困惑在于它们来自哪里:
- 他碰巧
collectionView
在 View Controller 的其他地方声明为全局变量。所以我想这是传递的必要条件? - 来自哪里
indexPath
? - 最令人困惑的是:它怎么知道
app
是什么?据我所知,它没有在任何地方声明。在我看过的所有教程中都是这种情况。世界上的一个实例的概念是App
从哪里来的?
非常感谢任何可以帮助我掌握这一点的人,我一直在搜索教程,但很难弄清楚这里的机制。
ios - 如何使用现代 UICollectionViewDiffableDataSource 支持自定义单元格重新排序?
基本上是标题。
如果您使用的是. UICollectionViewDiffableDataSource
,则无法使用 . 的传统方法对单元格重新排序collectionView.beginInteractiveMovementForItem(at: iPath)
。在 collectionView 上使用“InteractiveMovement”方法需要您实现collectionView(_:moveItemAt:to:)
哪个是UICollectionViewDataSource
协议方法,因为我没有使用,所以不能使用UICollectionViewDataSource
,我使用的是UICollectionViewDiffableDataSource
. 我尝试使用传统的“InteractiveMovement”方法使其工作,它们可能有 90% 的时间工作,但有时它们只是不起作用,我对此无能为力。
我设法收集到的唯一见解来自Apple 的“实现现代集合视图”,但这完全没用,因为演示代码显示如何支持重新排序的唯一方法是通过
具体来说,cell.accessories = [.disclosureIndicator(), .reorder(displayed: .always)]
它没用,因为我使用的是不支持添加魔法配件的自定义 collectionviewcell。
这里到底是什么解决方案?
ios - 您如何在可区分的数据源(带有组合布局的集合视图)中使用多个数据模型?
我目前在尝试在我的应用程序中开发搜索视图时碰壁了。我尝试将集合视图放置在表格视图单元格中,并使用传统的集合视图数据源委托(用于行的单元格等),但是这些实现中的任何一个在现代应用程序中似乎都远非最佳。我们的应用程序使用“朋友”、“用户”和“场地”三个模型。
我们已经成功地使用 Diffable Data Source 和组合布局将我们的模型之一填充到搜索视图中,但是当我尝试添加其他模型时,我收到以下错误:
""*** 由于未捕获的异常 'NSInternalInconsistencyException' 导致应用程序终止,原因:'无效参数不满足:section != NSNotFound' 以未捕获的 NSException 类型异常终止""
我很想链接设计,但我没有 10 声望
这是 SearchViewController
这是我们的模型的样子:
最后,这里是我们使用的自定义部分类,而不是控制器中通常的“枚举部分”,这很可能是问题所在:
最后,我应该提到,我们通过对 Firebase 的 API 调用使用完全不同的数据设置这 3 个模型。(数据在应用程序的其他任何地方都按预期运行)集合视图单元正在使用视图模型,因此在视图控制器中看到了“cell.viewModel = ...”。
几天来,我一直在努力让它按预期运行。我观看了 Apple 的所有视频,彻底检查了所有示例项目,并访问了谷歌提供的关于该主题的几乎所有链接。
这是我的第一个堆栈问题,所以如果我错过了任何重要信息,我深表歉意。肯定有人已经实现了这样的设计,我愿意接受任何实现这一目标的方法。谢谢!
ios - 使用 diffable 数据源时如何处理空状态 - UICollectionViewDiffableDataSource?
在使用传统的 UICollectionView 时,我们经常使用下面的代码来处理空状态:
在 UICollectionView 或 UITableView 中使用可区分数据源时如何处理状态?
swift - Swift Diffable Snapshot - 将新部分添加到快照并重新加载集合视图
我有一个包含部分和开头的集合视图。我想在用户创建数据并在新部分中显示数据后添加一个新部分。这是我尝试过但失败的代码。运行代码后,新部分不会出现。
谢谢!
ios - Firebase .observe() 更新值时,Swift Diffable 数据源将崩溃
我正在构建一个用户可以阅读文章的应用程序。每篇文章都由作者撰写,因此,在文章视图中,当用户单击作者的个人资料图片时,它会导航到作者的个人资料视图。
在作者简介视图中,有一个“关注”按钮,在同一视图中,还有作者的统计信息(例如,他/她写了多少篇文章,他们有多少关注者等)。与此非常接近的东西:
当作者个人资料视图加载时,一切正常。但是一旦用户触摸“关注”按钮,应用程序就会崩溃并出现以下错误:
由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“部分标识符计数与数据源计数不匹配。这很可能是由于标识符的散列问题。
这些是我遵循的步骤:
- 作者个人资料视图中的用户
- 用户看到“关注”按钮和显示有多少用户关注作者的统计数据
- 假设作者有 10 个关注者。用户点击“关注”按钮
- 在幕后,我进入 Firebase,获取作者,然后使用 .observeSingleEvent() 和 setValue() 将用户 ID 添加到字符串数组中:
- 然后我使用 Firebase 的.observe()方法读取数据,从“关注”->“关注”更新按钮状态,并从“10”->“11”增加关注者的值
编辑:代码部分:
数据源创建:
更新快照
和细胞:
这就是结果(如果我触摸“关注”按钮,红色部分会发生变化):
这是应用程序崩溃的地方。知道为什么吗?