gpt4 book ai didi

ios - 类似于 iPhone 消息应用程序的消息分组

转载 作者:行者123 更新时间:2023-11-28 15:44:21 25 4
gpt4 key购买 nike

在我们的 iOS 应用程序中,我们使用核心数据并使用 NSFetchedResultsController 将其与 TableView 绑定(bind)。该应用程序是关于“聊天”功能的。

用户界面与 iPhone 的“消息”应用程序相同。当我们点击一​​条消息时,它会显示历史记录以及所有按时间分组的历史记录。其背后的逻辑是,如果前一条消息和当前消息的接收间隔为 1 小时,则日期和时间戳将显示在最近的消息上。

我的问题是,如何对消息进行分组并获取它们,以便显示日期和时间戳以及发送者和接收者消息。

最佳答案

有四种类型的消息单元格类型 - 常规、组开始、组中、组结束。组启动消息比上一个消息晚一个多小时,但距下一个消息不到一个小时。 group-middle前后相隔不到一个小时。 group-end 接近它之前的那个,但是比它之后的一个多小时。常规是前后一个多小时。

这个项目有两个部分。一是正确显示每种类型的单元格。另一个是弄清楚每条消息是哪种类型。我假设您可以自己弄清楚 UI 的东西(不同的填充,对于每个填充,常规和组开始显示时间,而不是圆角等)。

对于每条消息来说,找出它的类型并不难 - 只需查看它之前和之后的消息。它可以在结果的单次运行中完成 - O(n)。它也可以通过缓存懒惰地完成(即每次单元加载检查它之前和之后的消息 - 将答案保存在缓存中以备下次使用)。如果不同类型的单元格大小不同,则会导致 estimatedRowHeight 出现一些奇怪的跳跃。您还可以在计算后将类型的结果存储到核心数据中。

插入消息时要小心,以使其上方和下方的消息单元格类型无效并重新计算。此外,在计算没有下一个或上一个单元格的情况下的消息单元格类型时。

我认为您希望获得一些核心数据魔法 - 例如 sectionIndexKey 的一些切肉技巧。但它确实更直接地遍历数组并计算它。

更新:只是为了说清楚:不要使用部分。将所有单元格放在一个部分中。只需将时间添加到单元格类型 group-start 的单元格顶部。这比处理部分要容易得多,尤其是当存在可能导致和较早的单元格从正常更改为组开始的插入时。

关于ios - 类似于 iPhone 消息应用程序的消息分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43344498/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com