问题描述
我有2个嵌入到TabBarViewController中的UICollectionView控制器(一个 Storefront ,客户可以在其中看到所有产品,而 Backend ,我可以在其中隐藏项目)。这两个视图控制器都有单独的数据源(最初它们包含相同的项目,在我的情况下,它们具有“ name”和“ price”属性)是填充它们的数据源。
这个想法很简单:假设我单击了后端VC中的一个单元,以模态形式显示了Detail VC,我编辑了对象的某些属性并确认了更改。我想要的是该对象的更改对于后端VC和Storefront VC都是可见的。
我想到的第一件事就是实现NotificationCenter,以将详细信息VC的更改广播到后端和店面,但这是一件事情:当我在后端VC中收到项目并致电 snapshot.reloadItems ,因为该项目属于后端VC数据源,但是当Storefront VC收到同一项目时,出现以下错误:由于未捕获的异常'NSInternalInconsistencyException',正在终止应用程序,原因:'无效的参数不令人满意:indexPath || ignoreInvalidItems”。
我了解到,可变数据源基于项目相同或不同的想法,因此当我将项目从Backend的数据源传递到Storefront的数据源时,Storefront的数据源不知道如何实现快照。 reloadItems ,因为它首先没有包含具有适当ID的商品。
有什么想法如何使用差异数据源和NotificationCenter来实现上述功能?还是其他方法?
我考虑过要为Storefront和Backend共享数据源,但不确定这样做是否合理,并且将来是否会带来麻烦。
解决方法
我发现的唯一解决方案是将模型从Struct更改为Class。这样,一切都可以正常工作。