格式sectionNameKeyPath NSFetchedResultsController – Swift

我试图格式化我的sectionNameKeyPath我的核心数据获取使用存储的NSDate属性。 它是完全正常工作,并根据NSDate将logging分为不同的部分,但我不知道如何格式化以dd-mm-yyyy显示。

我知道如何格式化NSDate使用:

 let date = NSDate(timeIntervalSince1970:myTimeInterval) let dateFormatter = NSDateFormatter() dateFormatter.dateFormat = "dd-MM-yyyy" 

我目前的获取请求使用核心数据属性sectionDate作为sectionDate的部分

 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 

所以为了澄清我想格式化输出和sorting只是dd-MM-yyy。 目前看起来像

在这里输入图像说明

我认为一个黑客正在创build一个额外的属性,并input一个格式化的string,然后用这个来区分结果?

我只是为了一个我正在做的项目而做了这个。 以下是我所做的:

可选,但强烈build议,是设置mogenerator。 这里有一个很好的教程来设置你的核心数据项目来使用它。

无论如何,在你的数据模型中,确保你有一个与实体关联的NSManagedObject子类。 如果你还没有,而你不使用mogenerator,那么你可以做苹果的方式 。

在您的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的date上进行分组,否则请为您的dateSections属性进行计算属性。)然后,您可以从上面修改抓取的结果控制器以使用计算属性:

 let frc = NSFetchedResultsController( fetchRequest: fetchRequest, managedObjectContext: self.managedObjectContext!, sectionNameKeyPath: "formattedDateDue", cacheName: nil) 

这就是它的全部!