问题标签 [diffabledatasource]

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.

0 投票
1 回答
1401 浏览

ios - DiffableDataSource 抛出“致命:提供的标识符不是唯一的。” 将 MPMediaItem 包装在结构中时

我用来UITableviewDiffableDataSource显示UITableView音乐库中的歌曲。这段代码运行良好:

但是当我包裹MPMediaItem在一个 custom中时Track struct,我得到了这个错误:Fatal: supplied identifiers are not unique.

MPMediaItem已经符合Equatable,所以我认为如果我在另一个也符合and ( )Hashable的结构中使用它应该没问题。EquatableHashableTrack struct

更新 1:是我为方便apply(section:items:)添加的扩展:UITableViewDiffableDataSource

更新2:在我符合协议后它起作用Track了:Identifiable

甚至更改title为 store 属性也可以正常工作:

是什么让这些案例之间如此不同?为什么在MPMediaItem用作结构的唯一存储属性时会出现错误Track?提前致谢!

0 投票
0 回答
407 浏览

uicollectionview - 使用不同的数据源添加、更改和删除

好的,我有一个带有可区分数据源的集合视图的初步工作版本。一切正常,我刚刚实现了添加和更改项目,以及删除仍有待完成的项目。目前关于使用可区分数据源添加、更改和删除项目的信息很少。我想知道我做的所有数组的东西是否都是正确的方法。我觉得我应该对快照做更多的事情。保存方法中的所有逻辑都应该在更新方法中吗?任何帮助表示赞赏和/或有关此事的任何资源

0 投票
0 回答
324 浏览

ios - 如何正确使用具有 DiffableDataSource 的一对多 Core Data 对象?

我无法让具有一对多关系的 Core Data 对象正确地与 DiffableDataSource 一起使用,并且可以使用一些指针。

我有一个表格视图,显示Task从核心数据检索到的对象。我正在使用DiffableDataSource和的组合NSFetchedResultsController。Task 对象经过建模,使其与更多 Task 对象具有一对多的“子任务”关系。表格视图应显示所有父级任务。当一个父任务被点击时,它的子任务应该被插入或从其位置下方的表格视图中删除。

我在didChangeContentWith下面的方法中经历了几种不同的解决方案,但没有达到我想要的结果。目前,我的桌面视图似乎都被打乱了;选择一行会插入重复或不正确的任务。

在此处输入图像描述

起初我认为我的细胞没有为重复使用做好适当的准备,但事实似乎并非如此。我还尝试过仅获取父任务并使用它们对子任务的引用进行插入,添加所有任务并在未展开时删除子任务,以及其他几种方法。

当我查看初始快照和最终差异时,在我的didChangeContentWith方法中,初始快照包含所有任务(和子任务),差异仅包含所需的任务。我不确定我的差异及其对表格视图的应用程序之间发生了什么。我有一种感觉,这与任务对更多任务的引用有关,这些任务不能很好地与 Diffable 一起使用,但我可能只是疯了。

示例数据和逻辑如下:

任务模型:

在此处输入图像描述

的实例化NSFetchedResultsController

数据源的配置:

最后,我有以下委托方法:

0 投票
0 回答
558 浏览

ios - 可区分数据源性能问题

我已经使用 diffable 数据源有UITableView一段时间了,我喜欢它。但是今天我意识到它的设计中固有的一个问题。要使用 diffable 数据源,需要在数据发生变化时生成并应用快照。如果数据量很大,或者更可能是数据量不是很大,但生成每个数据点的时间很短,那么生成快照的累积时间会变得很明显,导致用户体验不佳。我不认为旧 API 有这个问题,因为委托函数仅被调用以显示在屏幕上的项目。

由于它是一项新技术(它是为 SwiftUI 引入的,对吗?),我不敢相信它会有如此明显的限制。但是从我在网上找到的材料来看,我看不出它是如何解决这个问题的。在 WWDC 2019 session 220 视频中,演讲者提到它可以以透明的方式在后台线程上运行,但我认为这不一定能缓解所有场景中的问题。例如,在数据更改由用户交互发起的场景中,通常以同步方式处理数据和更新 UI,因此在后台运行并没有真正的帮助。

我想我一定错过了什么,但我看不出它是什么。任何解释将不胜感激。

0 投票
1 回答
2351 浏览

ios - 集合视图 Diffable 数据源单元格消失且未正确调整大小?

我的收藏视图有一个非常奇怪的问题。我正在使用适用于 iOS 13+ 的 Compositional Layout 和 Diffable Data Source API,但我遇到了一些非常奇怪的行为。如下面的视频所示,当我更新数据源时,添加到顶部的第一个单元格没有正确调整大小,然后当我添加第二个单元格时,两个单元格都消失了,然后当我添加第三个单元格时,都以适当的尺寸加载并出现。当我取消添加所有单元格并以类似的方式再次添加它们时,最初的问题不会再次发生。

错误视频

我尝试以某种方式使用以下解决方案:

我似乎无法弄清楚可能导致此问题的原因。也许可能是我在集合视图中注册了两个不同的单元格,并且不正确地将它们出列,或者我的数据类型不正确地符合可散列。我相信我已经解决了这两个问题,但我也会提供我的代码来提供帮助。此外,提到的数据控制器是一个简单的类,它存储了一组视图模型,供单元格用于配置(那里不应该有任何问题)。谢谢!

集合视图控制器

邀请单元格(第一个单元格类型)

受邀细胞(第二细胞类型)

Invites Cell View Model(细胞模型)

如果我需要提供其他任何东西来更好地帮助回答这个问题,请在评论中告诉我!

0 投票
1 回答
162 浏览

ios - 永远不会为 UICollectionViewDiffableDataSource 执行 CellProvider 闭包

0 投票
0 回答
142 浏览

ios - 在新的 UITableViewDiffableDataSource 中搜索时出错 [快照]

我知道这是一个常见错误,并且已经讨论过很多次,但请听我说。我已经阅读了很多这些帖子,但没有一个提到我的具体案例,我自己也无法找到解决方案。

这是我得到的错误:

[Snapshotting] Snapshotting a view (0x7fab10c300b0, _UIReplicantView) that has not been rendered at least once requires afterScreenUpdates:YES.

根据我的观察,每次我开始在 searchController 中搜索时它都会出现。在我看来,当键盘更改时会弹出错误(从大写字母变为小写字母,反之亦然......)。

我试过了:

  • .layoutIfNeeded()我可能的任何地方(tableView、cells、view、searchBar...)
  • 所有 UI 更改都发生在主线程上
  • 玩弄不同的searchController.searchBar.searchTextField.becomeFirstResponder()

不用说,以上都没有解决我的问题。

这是我的搜索代码:

更新 diffable 数据源

正如我所说,当我将第一个字母放入搜索栏中或将其删除时,错误会准确弹出。否则一切正常。

任何帮助或提示将不胜感激!

0 投票
0 回答
172 浏览

ios - iOS UICollectionViewDiffableDataSource 重新加载所有数据而不做任何更改

我有一个简单UICollectionView的 1 个部分和 1 个项目类型,由新的 iOS 13 提供支持UICollectionViewDiffableDataSource

即使没有更改数据源(相同hashValue的 s),也会UICollectionViewDiffableDataSource更新整个集合视图(调用cellProvier每个可见单元格)。

问题是,与预期相同的场景UITableViewDiffableDataSource,即没有更改数据源UITableViewDiffableDataSource 什么都不做

这是设计上的差异,还是某种错误?

0 投票
6 回答
1638 浏览

swift - Swift:当要为一个部分呈现内容时,请指定一个有效的部分定义。这是客户端错误

我目前正在使用集合视图和可区分的数据源开发一个简单的 IOS 应用程序。

每次更新源数据时,我都会初始化视图控制器配置中的所有内容并调用 reloadView 函数。

一旦我调用 reloadView 函数,应用程序就会崩溃并出现以下错误。但前提是集合视图之前是空的。如果那里已经有物品,那么一切都很好。

这就是我的代码的样子:

我像这样应用快照

我在我的配置中这样做了一次

这是我每次数据变化时调用的reload函数(如果之前没有显示数据就会报错)

任何想法为什么会这样?已经非常感谢了!

0 投票
1 回答
497 浏览

ios - Crash number of items in section 0 when there are only 0 sections in the collection view

I want to learn using UICollectionViewDiffableDataSource using Pinterest Layout, but when I try to running my simulator. it crash and give me a message

request for number of items in section 0 when there are only 0 sections in the collection view

I did the Pinterest layout using raywenderlich tutorial , when I stumble in google the problem cause is the Pinterest layout. but before I use the diffableDataSource it works fine, but after using diffableDataSource it crash. where do I do wrong? can you help me, this is my code for diffableDataSource