Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/94.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 使用NSFetchedResultsController按日期将CoreData模型排列到节中_Ios_Swift_Xcode_Core Data_Nsfetchedresultscontroller - Fatal编程技术网

Ios 使用NSFetchedResultsController按日期将CoreData模型排列到节中

Ios 使用NSFetchedResultsController按日期将CoreData模型排列到节中,ios,swift,xcode,core-data,nsfetchedresultscontroller,Ios,Swift,Xcode,Core Data,Nsfetchedresultscontroller,我目前正在使用CoreData进行模型的本地存储。我已经成功实现了一个NSfetchedResultsController来管理tableView中数据的检索和表示 我希望这些数据能在当地的一天内进行分段整理。因此,每一节都将是一个独特的地方日。与大多数聊天应用程序类似 我知道,除了时间戳之外,我还可以在managedObject中保存一个date属性,并将其用作sectionNameKeyPath,但是,当用户更改其设备上的时区时,这将不起作用。在这种情况下,我必须返回并更改coreData中

我目前正在使用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
类中使用一个计算属性。这就是我的方法

  • 使用ISO8601DateFormatter以相同的时区保存创建日期(GMT是最简单的)
  • 向Blog实体添加一个临时属性,例如
    localCreateDate:Date
    ,并通过使用本地时区将存储的创建日期解析为日期实例来计算它
  • 使用fetch控制器中新的
    localCreateDate
    作为
    部分NameKeyPath
    ,请参阅或

  • 我将在
    Blog
    类中使用一个计算属性。这就是我的方法

  • 使用ISO8601DateFormatter以相同的时区保存创建日期(GMT是最简单的)
  • 向Blog实体添加一个临时属性,例如
    localCreateDate:Date
    ,并通过使用本地时区将存储的创建日期解析为日期实例来计算它
  • 使用fetch控制器中新的
    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,这就是我试图在中演示的内容。啊,我今天非常粗心。“我一直在跟踪,但还是弄错了。”马丁纳,谢谢你的意见。