我正在尝试使用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")
}
}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在您的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模型已更新以包含这个计算属性,并且您的视图控制器或相应的数据源方法能够处理这种分组方式的变化,比如更新表格视图的头部标题以显示正确的日期。