格式sectionNameKeyPath NSFetchedResultsController - Swift

时间:2015-07-09 12:20:31

标签: ios swift nsfetchedresultscontroller

我正在尝试使用存储的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排序。目前它看起来像

enter image description here

我假设 Hack 正在创建一个额外的属性并输入一个格式化的字符串,然后使用它来分割结果?

1 个答案:

答案 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)

这就是它的全部内容!