ios - 带有 NotificationCenter 和 TabBarController 的 UICollectionView 可区分数据源
问题描述
我有 2 个嵌入 TabBarViewController 的 UICollectionView 控制器(客户可以看到所有产品的店面和可以 CRUD 项目的后端)。两个视图控制器都有单独的数据源(最初它们包括相同的项目,在我的例子中是具有“名称”和“价格”属性的对象)来填充它们。
这个想法很简单:假设我单击后端 VC 中的一个单元格,详细 VC 以模态方式呈现,我编辑对象的一些属性并确认更改。我想要的是对对象的更改对后端 VC 和店面 VC 都是可见的。
我想到的第一件事是实现 NotificationCenter 以将更改从 Detail VC 广播到 Backend 和 Storefront,但事情是这样的:当我在 Backend VC 中收到项目并调用snapshot.reloadItems时,一切都很好,因为该项目属于 Backend VC数据源,但是当 Storefront VC 收到相同的项目时,我收到以下错误:由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“无效参数不满足:indexPath || 忽略InvalidItems'。
我知道 diffable 数据源基于项目是否相同的想法,所以当我将项目从后端的数据源传递到 Storefront 的数据源时,Storefront 的数据源不知道如何实现snapshot.reloadItems因为它没有首先拥有具有适当 id 的项目。
任何想法如何使用 diffable 数据源和 NotificationCenter 来实现上述内容?还是有什么其他方法?
我考虑过为 Storefront 和 Backend 提供共享数据源,但不确定这样做是否合理以及将来是否会带来麻烦。
解决方案
我找到的唯一解决方案是将我的模型从 Struct 更改为 Class。这样,一切都可以正常工作。
推荐阅读
- python - 如何计算多个因变量(y1 和 y2)上的自变量(x)的相关性?
- java - getChildren() 如何访问外部类对象?
- javascript - 如何将变量添加到 package.json
- mysql - 如何在不更改配置文件的情况下将 mysql character_set_database 设置为 utf8mb4?(因为我无权访问这些文件)
- docker - 如何启用 cloudbees-jenkins-distribution docker push 以推送到受密码保护的私有注册表?
- assembly - 使用 IEND 时出现 ISTRUC NODE 错误“提供给 TIMES 的非常量参数”
- linux - 使用 getchar() 在原始模式下捕获 Ctrl-Enter?
- python - python使用sklearn进行线性回归
- javascript - 使用按钮中的 API 链接来点击下载文件的端点
- node.js - 等待 Firebase Cloud Functions 中地图内的快照值