Swift:保持多个viewControllers&的数据副本一致。数组

时间:2017-09-12 02:37:39

标签: ios arrays swift

我正在构建一个与Instagram功能相似的应用,我不知道如何最好地为我的tableviews和collectionviews构建数据。让我们首先回顾一下这些观点。

  1. Newsfeed VC拥有自己的帖子阵列(最新信息)
  2. 组VC有自己的帖子数组(组特定信息有~30个不同的组)
  3. 使用自己的帖子数组(特定搜索结果)搜索VC
  4. 扩展VC只显示全屏发布
  5. 问题是用户可以喜欢/评论群组/搜索VC中的帖子 可能 也在新闻源VC中,反之亦然。

    目前我正在将一个索引从VC传递给VC并修改数组中的数据。这导致了一些问题,我最终循环遍历其他阵列以同步喜欢/评论,然后我必须刷新该tableview,以便用户在本地更改。

    我想知道是否有更有效/逻辑的方式来存储所有这些数据。我需要将数据分组以与新闻源数据分开,并且用户可以在想要查看其他帖子时更改该组。

    我从未使用核心数据,但我对任何事情都持开放态度。理想情况下,我只需要每个帖子的一个副本就可以将我的所有信息存储在一个地方。现在,如果一个帖子在一个组&新闻源我有两个副本,每个对应的数组一个。我还需要按顺序获取帖子(他们已经有来自Firebase的时间戳和唯一ID)。

    更新

    由于与CoreData相关的学习曲线,我决定将所有帖子存储在字典中。然后每个VC只存储相关帖子的密钥。这样我只维护一份数据。不确定这对性能有多好,但它比多份副本更好。

2 个答案:

答案 0 :(得分:1)

您可以使用核心数据根据其唯一ID保存所有视图控制器中的帖子,避免重复记录。

从服务器提取数据时,每次需要保存核心数据时。

之后,在每个控件上,您需要使用右谓词,该谓词应该在为特定视图控制器获取数据时与您的查询匹配。

通过使用该谓词,从核心数据中获取数据,并使用该数据在视图控制器中显示。

要反映每个视图控制器中的更改,您可以从ViewWillAppear中的核心数据中获取数据并重新加载表或者您可以使用NSFetchedResultsController来更新数据。

希望这会有帮助。

答案 1 :(得分:0)

我决定将所有的post对象存储在一个字典中,然后将密钥存储到数组中每个viewController的帖子中。这防止了暂时不得不学习CoreData的开销,并解决了拥有同一对象的多个副本的问题。