我正在尝试使用存储的sectionNameKeyPath
属性格式化我的NSDate
以获取核心数据。它完全正常工作,并根据NSDate
将记录拉/分为几部分,但我不知道如何格式化它以显示dd-mm-yyyy。
我知道如何使用以下格式来格式化NSDate:
let date = NSDate(timeIntervalSince1970:myTimeInterval)
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "dd-MM-yyyy"
我当前的抓取请求使用核心数据属性sectionDate
作为sectionNameKeyPath
FETCH
let fetchRequest = NSFetchRequest(entityName: "VisitDetails")
let primarySortDescriptor = NSSortDescriptor(key: "dateDue", ascending: false)
let sortDescriptors = [primarySortDescriptor]
fetchRequest.sortDescriptors = sortDescriptors
let frc = NSFetchedResultsController(
fetchRequest: fetchRequest,
managedObjectContext: self.managedObjectContext!,
sectionNameKeyPath: "dateSections",
cacheName: nil)
frc.delegate = self
所以澄清我想要格式化输出并按dd-MM-yyy排序。目前它看起来像
我假设 Hack 正在创建一个额外的属性并输入一个格式化的字符串,然后使用它来分割结果?
答案 0 :(得分:4)
我刚刚为我正在进行的项目做了这件事。这就是我的所作所为:
可选,但强烈建议,是设置mogenerator。有一个很好的教程here用于设置您的核心数据项目以使用它。
无论如何,在您的数据模型中,请确保您具有与该实体关联的NSManagedObject子类。如果您还没有,并且您没有使用mogenerator,那么您可以do it the apple way。
在您的VisitDetails类中,添加:
var formattedDateDue: String {
get {
let dateFormatter = NSDateFormatter()
// Apple suggested locale-aware technique:
// dateFormatter.dateStyle = .ShortStyle
// dateFormatter.timeStyle = .NoStyle
// ..or to stick to your original question:
dateFormatter.dateFormat = "dd-MM-yyyy"
return dateFormatter.stringFromDate(self.dateDue)
}
}
(假设您希望将您的部分分组到dateDue的日期,否则为dateSections属性创建计算属性。)然后,您可以从上面修改获取的结果控制器以使用计算的属性:
let frc = NSFetchedResultsController(
fetchRequest: fetchRequest,
managedObjectContext: self.managedObjectContext!,
sectionNameKeyPath: "formattedDateDue",
cacheName: nil)
这就是它的全部内容!