Ios 使用NSFetchedResultsController按日期将CoreData模型排列到节中
我目前正在使用CoreData进行模型的本地存储。我已经成功实现了一个NSfetchedResultsController来管理tableView中数据的检索和表示 我希望这些数据能在当地的一天内进行分段整理。因此,每一节都将是一个独特的地方日。与大多数聊天应用程序类似 我知道,除了时间戳之外,我还可以在managedObject中保存一个date属性,并将其用作sectionNameKeyPath,但是,当用户更改其设备上的时区时,这将不起作用。在这种情况下,我必须返回并更改coreData中的每个条目,并更改本地日条目 考虑到时区变化的可能性,是否有一种更简单的方法实现按日组织Ios 使用NSFetchedResultsController按日期将CoreData模型排列到节中,ios,swift,xcode,core-data,nsfetchedresultscontroller,Ios,Swift,Xcode,Core Data,Nsfetchedresultscontroller,我目前正在使用CoreData进行模型的本地存储。我已经成功实现了一个NSfetchedResultsController来管理tableView中数据的检索和表示 我希望这些数据能在当地的一天内进行分段整理。因此,每一节都将是一个独特的地方日。与大多数聊天应用程序类似 我知道,除了时间戳之外,我还可以在managedObject中保存一个date属性,并将其用作sectionNameKeyPath,但是,当用户更改其设备上的时区时,这将不起作用。在这种情况下,我必须返回并更改coreData中
let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Blog")
let blogSort = NSSortDescriptor(key: "dateCreated", ascending: true)
request.sortDescriptors = [blogSort]
fetchedResultsController = NSFetchedResultsController(fetchRequest: request, managedObjectContext: context, sectionNameKeyPath: "localDate", cacheName: nil)
let request=NSFetchRequest(entityName:“Blog”)
让blogSort=NSSortDescriptor(键:“dateCreated”,升序:true)
request.sortDescriptors=[blogSort]
fetchedResultsController=NSFetchedResultsController(fetchRequest:request,managedObjectContext:context,sectionNameKeyPath:“localDate”,cacheName:nil)
在本例中,dateCreated是博客创建日期的时间戳,localDate是实际日历日期。这不是您问题的答案。但我认为这对你有帮助
let date = Date.init()
let dateFormatter = DateFormatter.init()
dateFormatter.dateStyle = .short
let stringDate = dateFormatter(stringFrom: date)
然后您可以将此字符串作为localDate
保存到managedObject
managedObject.localDate = stringDate
这不是你问题的答案。但我认为这对你有帮助
let date = Date.init()
let dateFormatter = DateFormatter.init()
dateFormatter.dateStyle = .short
let stringDate = dateFormatter(stringFrom: date)
然后您可以将此字符串作为localDate
保存到managedObject
managedObject.localDate = stringDate
我将在
Blog
类中使用一个计算属性。这就是我的方法
localCreateDate:Date
,并通过使用本地时区将存储的创建日期解析为日期实例来计算它localCreateDate
作为部分NameKeyPath
,请参阅或我将在
Blog
类中使用一个计算属性。这就是我的方法
localCreateDate:Date
,并通过使用本地时区将存储的创建日期解析为日期实例来计算它localCreateDate
作为部分NameKeyPath
,请参阅或如何将
localDate
属性保存到模型中?使用Calendar.current将时间戳转换为日期字符串并将其保存为字符串您是否尝试过使用DateFormatter
我认为从我所读到的答案是在coredata中使用瞬态属性。只是不知道如何使用swift 4实现这一点。请看,它演示了如何定义一个临时属性sectionIdentifier
,该属性可以用作获取结果控制器的sectionNameKeyPath
。如何将localDate
属性保存到模型?使用Calendar.current将时间戳转换为日期字符串并将其保存为字符串您尝试过吗DateFormatter
我认为,从我所读到的内容来看,答案在于在coredata中使用瞬态属性。只是不确定如何使用swift 4实现。请看,它演示了如何定义一个瞬态属性sectionIdentifier
,该属性可以用作获取结果控制器的sectionNameKeyPath
。我知道如何做。这将始终按本地日期对分区进行分组。但是,如果用户随后前往欧洲,并且手机上的时区发生变化,那么您的日期字符串将是他们离开的地方的本地日期,并且这些部分看起来不正确。答案必须是coreData上的瞬态属性,以及许多目标C和旧swift的示例,但没有当前的示例。我还没有测试!但我认为这是可能的。因此,将localDate
保存为Date.init()
到模型中。从模型中检索时,将此值转换为日历.current。我知道如何执行此操作。这将始终按本地日期对分区进行分组。但是,如果用户随后前往欧洲,并且手机上的时区发生变化,那么您的日期字符串将是他们离开的地方的本地日期,并且这些部分看起来不正确。答案必须是coreData上的瞬态属性,以及许多目标C和旧swift的示例,但没有当前的示例。我还没有测试!但我认为这是可能的。因此,将localDate
保存为Date.init()
到模型中。并在从模型检索时将此值转换为日历.current。您不能在核心数据排序描述符中使用计算属性。@MartinR,您是对的。我在考虑一个瞬态属性。在核心数据排序描述符中也不能使用瞬态属性。但是,您可以将它们用作sectionNameKeyPath,这就是我试图在中演示的内容。啊,我今天非常粗心。我一直在跟踪,但还是弄错了。@MartinR,谢谢你的输入。你不能在核心数据排序描述符中使用computed属性。@MartinR,你是对的。我在考虑一个瞬态属性。在核心数据排序描述符中也不能使用瞬态属性。但是,您可以将它们用作sectionNameKeyPath,这就是我试图在中演示的内容。啊,我今天非常粗心。“我一直在跟踪,但还是弄错了。”马丁纳,谢谢你的意见。