开发者社区 问答 正文

如何快速使用XMPP按日期分组聊天消息?

我正在尝试使用XMPP实现一个聊天应用程序。我试图只按日期对邮件进行分组,但时间戳包含“日期与时间”。

有人能帮我解决这个问题吗。

lazy var fetchController: NSFetchedResultsController<NSFetchRequestResult>? = {
    if let fetchRequest = self.xmppManager?.getFetchRequestForArchievedMessages(nil), let moc = self.xmppManager?.getXMPPMocForMessages() {
        let fetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: moc, sectionNameKeyPath: "timestamp", cacheName: nil)
        fetchedResultsController.delegate = self
        return fetchedResultsController
    }
    return nil
}()

提前谢谢。

按照建议,我写了计算属性

extension XMPPMessageArchiving_Message_CoreDataObject {
var dateAsSection: String {
    get {
        return self.timestamp.toString(withFormat: "dd/mm/yyyy")
    }
}

展开
收起
游客5akardh5cojhg 2019-12-05 16:49:51 631 分享 版权
阿里云 AI 助理回答

在您的XMPP聊天应用程序中,您希望按日期对消息进行分组,而不考虑时间。您已经正确地通过扩展XMPPMessageArchiving_Message_CoreDataObject并添加了一个计算属性dateAsSection来实现这一需求。这个方法将原始的timestamp转换为只包含日期的部分。

现在,您需要在NSFetchedResultsController的初始化中使用这个新的计算属性作为sectionNameKeyPath,而不是直接使用包含日期和时间的timestamp字段。修改您的fetchController lazy初始化如下:

lazy var fetchController: NSFetchedResultsController? = {
    if let fetchRequest = self.xmppManager?.getFetchRequestForArchievedMessages(nil), let moc = self.xmppManager?.getXMPPMocForMessages() {
        // 修改sectionNameKeyPath为新定义的计算属性dateAsSection
        let fetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: moc, sectionNameKeyPath: "dateAsSection", cacheName: nil)
        fetchedResultsController.delegate = self
        return fetchedResultsController
    }
    return nil
}()

这样设置后,您的聊天记录将会按照日期(不包含时间)进行分组展示。请确保在执行此操作之前,您的Core Data模型已更新以包含这个计算属性,并且您的视图控制器或相应的数据源方法能够处理这种分组方式的变化,比如更新表格视图的头部标题以显示正确的日期。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答地址: