如何最好地通过时间戳保存聊天中的消息?

时间:2017-06-20 08:39:44

标签: ios swift time chat

我有关于创建聊天室的以下问题。消息模型具有creationTimeStamp属性,在用户从设备发送消息时分配。当另一个用户(或用户收到此消息)时,此时我不会在设备本地接收消息时更改此属性。我在Realm中本地保存的消息。问题是,例如,消息一次发送给第一个用户,但由于Internet连接速度慢,第二个用户已经有时间发送他的消息(或消息),然后第二个用户在他的消息后出现此消息向ChatViewController发送消息,但当他离开此控制器并返回时,他的消息将显示在最后,而不是第一个用户的消息,因为当我从Realm接收消息时,我按creationTimeStamp对它们进行排序。所以我想学习保存时间戳的最佳做法,对于这种情况。

在设备上收到消息时更改creationTimeStamp会更好吗?但是如果用户有多个设备,这里也存在问题。虽然我认为这是消息存储在iMessage中的方式,因为它们具有设备之间的同步,所以当快速创建消息时,我会附加相同通信的屏幕保护。

enter image description here enter image description here

1 个答案:

答案 0 :(得分:2)

不幸的是,我没有最好的练习,只有一些想法。

我认为如果不给用户带来不便,您想要实现的目标很难实现。我的意思是,由于互联网连接速度的原因,不同的用户可能对消息的时间安排有不同的观点。您可以在一段时间后使用<?xml version="1.0" encoding="utf-8"?> <doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd" xmlns:gedmo="http://gediminasm.org/schemas/orm/doctrine-extensions-mappin‌​g"> <entity repository-class="AppBundle\Repository\EventRepository" name="AppBundle\Entity\Event"> <id name="id" type="integer" column="id"> <generator strategy="AUTO"/> </id> <field name="startDate" type="datetime" column="startDate"/> <field name="endDate" type="datetime" column="endDate"/> <field name="title" type="string" column="title" length="255"/> <field name="slug" type="string" column="slug" length="255" unique="true"> <gedmo:slug unique="true" updatable="true" fields="title" separator="-" /> </field> <field name="description" type="text" column="description" nullable="true"/> <field name="image" type="string" column="image" length="255" nullable="true"/> <field name="followers" type="integer" column="followers" nullable="true"/> <field name="city" type="string" column="city" nullable="false" /> <field name="place" type="string" column="place" nullable="true" /> </entity> </doctrine-mapping> 来纠正/同步他们的视图以获取消息,但随后屏幕上的消息将被重新排序,这可能很烦人。

我想你可以考虑不同的方法 - 所有用户都拥有相同的时间线视图是否重要?在不久前我们正在实施群聊时,我们同意单个用户可以拥有不同时间线视图的概念。然后我们使用creationTimeStamp进行排序,因为本地消息recievedTimeStampreceivedTimeStamp相同。它对我们来说非常好,但当然你可以有不同的要求。