问题描述
我正在使用 MVC 模式来部署 iOS 应用程序。 当我实现像 whatsapp 这样的聊天功能时,我感到困惑:
基本思想是,我需要使用 Firestore 集合文档中存在的所有用户填充 collection view
,向发送的最新消息添加侦听器。
集合的架构如下所示:
User_lastMessages(集合)
|
用户 ID(文档)
|
聊天用户(集合)
|
finalDocumentId(文档)
此最新文档包含:
-user id
-lastMessageSent
-timestampLastMessage
-username
我需要完成的 UI 表示是这样的:
1)username 和 lastmessage 来自我之前提到的集合
2)ImageView(白色方块)来自另一个集合,我可以通过用户的 uid 检索它
问题:您在单元格右侧看到的数字来自另一个集合,并且会不断变化。我如何确定每当它更改时 UI 都会相应更改?
我很困惑,使用不同的 Firestore 集合文档构建模型是一种糟糕的方法,还是模型必须仅由一个 Firestore 文档组成。
解决方法
您可以轻松地在模型中使用多个文档。在您的情况下,适当的配置是:
- 您的视图控制器加载一个文档
- 列表中的每个单元格负责加载另外两个文档(包含图像视图和消息计数)。您可以附加侦听器以确保此信息实时更改
但是,在部署之前,您确实需要考虑那些“读取”操作的数量。在 Firestore 中设计架构时,您应该始终考虑您的用例并尽量减少不必要的读取。
例如,您可以有另一个名为“聊天”的集合,其中包含:
user1_id
user2_id
number_of_messages
chat_icon
unique_chat_id
在这种情况下,一个简单的查询“where user1_id == ID”会给你一个包含你需要的所有信息的数组。
然后消息可以包含一个字段 chat_id
,它使您能够加载属于特定聊天的所有消息。
我上面概述的不一定是最好的或最优的模式。但是,我建议您观看 Firestore 视频(它们很棒):https://www.youtube.com/watch?v=haMOUb3KVSo