2017-02-06 16 views
0

私は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)") 
} 

コアデータ属性の写真 enter image description here

+0

に動作しますが、実際のコードを表示することができますか?なぜなら、あなたが記述しているように述語がどのように機能するのかはわからないからです。また、あなたが作成する 'NSSortDescriptor'は' ascending:false'を指定しますが、あなたが望むように日付は昇順になります。 –

+0

あなたのデッドフィールドは、 'CoreData'ではなく' Date'タイプの 'String'の型です。 –

+0

私の質問が更新されました。私はコード@DaveWestonを含めました。 – toiavalle

答えて

1

スウィフト3

var sdSortDate = NSSortDescriptor.init(key: "date", ascending: false) 
fr.sortDescriptors = [sdSortDate] 
let result4 = try! context.fetch(fr) 

私はスウィフト3でそれをテストし、うまく

[<NSManagedObject: 0x618000089060> (entity: CoreDate; id: 0x61800002c460 <x-coredata://E7D9FD6F-5DCF-464B-93BF-D1609BF35695/CoreDate/p3> ; data: { 
    date = "2017-02-09 21:35:19 +0000"; 
}), <NSManagedObject: 0x61800008b680> (entity: CoreDate; id: 0x60000002c140 <x-coredata://E7D9FD6F-5DCF-464B-93BF-D1609BF35695/CoreDate/p1> ; data: { 
    date = "2017-02-06 04:41:59 +0000"; 
}), <NSManagedObject: 0x60800008c080> (entity: CoreDate; id: 0x60800002d460 <x-coredata://E7D9FD6F-5DCF-464B-93BF-D1609BF35695/CoreDate/p2> ; data: { 
    date = "2017-02-17 18:28:39 +0000"; 
})] 

After sort 

[<NSManagedObject: 0x61800008b680> (entity: CoreDate; id: 0x60000002c140 <x-coredata://E7D9FD6F-5DCF-464B-93BF-D1609BF35695/CoreDate/p1> ; data: { 
    date = "2017-02-06 04:41:59 +0000"; 
}), <NSManagedObject: 0x618000089060> (entity: CoreDate; id: 0x61800002c460 <x-coredata://E7D9FD6F-5DCF-464B-93BF-D1609BF35695/CoreDate/p3> ; data: { 
    date = "2017-02-09 21:35:19 +0000"; 
}), <NSManagedObject: 0x60800008c080> (entity: CoreDate; id: 0x60800002d460 <x-coredata://E7D9FD6F-5DCF-464B-93BF-D1609BF35695/CoreDate/p2> ; data: { 
    date = "2017-02-17 18:28:39 +0000"; 
})] 
+0

はDate型の日付属性ですか?またはストリング? – toiavalle

+0

日付属性のタイプは、日付 –

関連する問題