格式 sectionNameKeyPath NSFetchedResultsController - Swift

Format sectionNameKeyPath NSFetchedResultsController - Swift

我正在尝试使用存储的 NSDate 属性为我的核心数据提取格式化我的 sectionNameKeyPath。它完全正常工作,pulling/sorting 记录根据 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 正在创建附加属性并输入格式化字符串,然后使用它来分割结果?

我刚刚为我正在进行的项目做了这个。这是我所做的:

可选但强烈推荐的是设置 mogenerator。有一个很好的教程 here 用于设置您的核心数据项目以使用它。

无论如何,在您的数据模型中,请确保您有一个与实体关联的 NSManagedObject 子class。如果您还没有,并且您没有使用 mogenerator,那么您可以 do it the apple way.

在您的 VisitDetails class 中,添加:

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)

仅此而已!