简体   繁体   English

如何使用 xmpp 快速按日期对聊天消息进行分组?

[英]How to group chat message by date in swift using xmpp?

I'm trying to implement a chat application using XMPP.我正在尝试使用 XMPP 实现聊天应用程序。 I was trying to group messages only by date, but timestamp contains "date with time".我试图仅按日期对消息进行分组,但时间戳包含“带时间的日期”。

Could someone please help me fix this issue.有人可以帮我解决这个问题。

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
}()

Thanks in advance.提前致谢。

As suggested, I wrote computed property按照建议,我写了计算属性

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

But terminates with但以

Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[ valueForUndefinedKey:]: the entity XMPPMessageArchiving_Message_CoreDataObject is not key value coding-compliant for the key "dateAsSection".'由于未捕获的异常“NSUnknownKeyException”而终止应用程序,原因:“[valueForUndefinedKey:]:实体 XMPPMessageArchiving_Message_CoreDataObject 与键“dateAsSection”的键值编码不兼容。

Finally got the solution.终于得到了解决方案。 Thanks to @Joakim Danielson for helping me out.感谢@Joakim Danielson 帮助我。

 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: **#keyPath(XMPPMessageArchiving_Message_CoreDataObject.dateAsSection)**, cacheName: nil)
        fetchedResultsController.delegate = self
        return fetchedResultsController
    }
    return nil
}()

computed property has to be added to the extension必须将计算属性添加到扩展中

extension XMPPMessageArchiving_Message_CoreDataObject {
@objc var dateAsSection : Date {
    get {
        return self.timestamp.toString(withFormat: "dd/MM/yyyy").toDate(withFormat: "dd/MM/yyyy")!
    }
}
}

Worked for me...为我工作...

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM