私はSwiftでコアデータを使用してアプリケーションを構築しています。私はデート属性であるタスクエンティティを使用しています。私はこの期日に従ってタスクを並べ替える必要があります。Swiftはコアデータを日付別にソートします(時間だけでなく)
私はキー
NSSortDescriptor.init(key: "due", ascending: false)
起因する問題でNSSortDescriptorを使用してみました:それは時間だけで自分のデータをソート
- ここでは日/月/年
を考慮しないことがあります取得リクエストから取得したデータ:
Optional(2017-02-06 03:29:18 +0000)
Optional(2017-02-08 03:29:27 +0000)
Optional(2017-02-07 03:29:38 +0000)
Optional(2017-02-08 03:30:29 +0000)
どうすれば早く分けることができますか? (全体NSDateを考慮していないだけの時間部分)
は、私はそれになりたい:完成
Optional(2017-02-06 03:29:18 +0000)
Optional(2017-02-07 03:29:38 +0000)
Optional(2017-02-08 03:29:27 +0000)
Optional(2017-02-08 03:30:29 +0000)
完全なコード すべてのタスクがリスト内の0であり、私が呼んでいる:
helper(showComp: true, sortBy: NSSortDescriptor.init(key: "due", ascending: false))
ヘルパーFUNC:
func helper(showComp: Bool, sortBy: NSSortDescriptor?){
let g = cur as! Group
guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else {
return
}
let managedContext = appDelegate.persistentContainer.viewContext
let fetchRequest = NSFetchRequest<NSManagedObject>(entityName: "Task")
let sortDescriptor0 = NSSortDescriptor.init(key: "completed", ascending: true)
let sortDescriptor = NSSortDescriptor.init(key: "index", ascending: true)
if sortBy == nil {
fetchRequest.sortDescriptors = [sortDescriptor0, sortDescriptor]
}else{
fetchRequest.sortDescriptors = [sortDescriptor0, sortBy!]
}
if (cur as! Group).name != "All"{
var predicate = NSPredicate(format: "group = %@", argumentArray: [g])
if !showComp {
predicate = NSPredicate(format: "group = %@ && completed = %@", argumentArray: [g, 0])
}
fetchRequest.predicate = predicate
}
do {
groups = try managedContext.fetch(fetchRequest)
} catch let error as NSError {
print("Could not fetch. \(error), \(error.userInfo)")
}
に動作しますが、実際のコードを表示することができますか?なぜなら、あなたが記述しているように述語がどのように機能するのかはわからないからです。また、あなたが作成する 'NSSortDescriptor'は' ascending:false'を指定しますが、あなたが望むように日付は昇順になります。 –
あなたのデッドフィールドは、 'CoreData'ではなく' Date'タイプの 'String'の型です。 –
私の質問が更新されました。私はコード@DaveWestonを含めました。 – toiavalle