使用NSFetchedResultsController将CoreData模型按日期

时间:2018-05-15 04:18:07

标签: ios swift xcode core-data nsfetchedresultscontroller

我目前正在使用CoreData进行模型的本地存储。我已成功实现了NSfetchedResultsController来管理tableView中数据的检索和呈现。

我希望数据按当地日期分组。所以每个部分都将是一个独特的当地日。与大多数聊天应用类似。

我知道除了时间戳之外,我还可以在managedObject中保存日期属性,并将其用作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)

在此示例中,dateCreated是博客创建日期的时间戳,localDate是实际日历日期。

2 个答案:

答案 0 :(得分:1)

这不是您问题的答案。但我认为这对你有帮助。

let date = Date.init()
let dateFormatter = DateFormatter.init()
dateFormatter.dateStyle = .short
let stringDate = dateFormatter(stringFrom: date)

然后,您可以将此字符串另存为localDate。{/ p>。{/ 1}

managedObject

答案 1 :(得分:1)

我会在Blog类中使用计算属性。这就是我如何处理这个

  1. 使用ISO8601DateFormatter
  2. 将创建日期保存为相同的时区(GMT最简单)
  3. 向Blog实体添加一个瞬态属性,比如localCreateDate: Date,并通过使用本地时区将存储的创建日期解析为Date实例来计算它。
  4. 使用获取控制器中的新localCreateDate作为sectionNameKeyPath,请参阅this answerthis by Martin R