首页 > 解决方案 > 带有 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 提供共享数据源,但不确定这样做是否合理以及将来是否会带来麻烦。

标签: iosswiftnsnotificationcenterdiffabledatasource

解决方案


我找到的唯一解决方案是将我的模型从 Struct 更改为 Class。这样,一切都可以正常工作。


推荐阅读