如何使用 Combine 将 NSManagedObject 绑定到 table/collection 视图单元格?

How can I bind an NSManagedObject to a table/collection view cell using Combine?

我有一个 NSFetchedResultsController 和一个动态 table 视图。我的 table 视图单元格有一个文本标签。我应该如何将对象从 fetched results controller 绑定到 cell?

WWDC 2019 230中,有一个核心数据对象绑定到视图的代码片段...

if let tag = try? fetchRequest.execute().first {
  nameSubscription = tag.publisher(for: \.name).assign(to: \.text, on: tagLabel)
  colorSubscription = tag.publisher(for: \.color).map({ [=11=] as? UIColor}).assign(to: \.textColor, on: tagLabel)
}

在带有标签的单元格的 table 视图控制器的上下文中,这应该发生在什么地方?订户 (AnyCancellable) 应该去哪里?由于单元格的数量不确定,我是否需要订阅者集合?

我想像这样的绑定在 WWDC 会话中显示为详细视图。

Table 视图单元格在滚动过程中被重复使用。

这就是为什么您不应该将特定数据模型的 属性 更改绑定到单元格中标签的更新。

相反,您应该在控制器级别观察数据模型的变化,并在发生变化时重新加载 table 视图单元格和/或部分。

您的情况与视频的情况不符。视频不从获取的结果控制器执行这种绑定,而是从单个获取请求执行;它使显示保持最新,以防基础数据发生变化。正如视频继续说的那样,从获取的结果控制器中保持 table 视图更新的方法是使用委托方法派生快照并将其提供给可比较的数据源。