2017-02-27 24 views
3

私はコアデータエンティティを取得するfunc getData()を持っており、日付でソートしたいと思います。 NSPredicateまたはPredicateを適用してCoreDataのデータを日付順にソートするにはどうすればよいですか?日付でソート - Swift 3

私のコアデータエンティティ: エンティティ:費用 属性: を - 量 - カテゴリ - 日付

func getData() { 
    let context = appDelegate.persistentContainer.viewContext 

    do { 
     expenses = try context.fetch(Expenses.fetchRequest()) 
    } catch { 
     print("Cannot fetch Expenses") 
    } 
} 

は助けてくれてありがとう!

+2

ルックアップNSSortDescriptor' ... –

+0

すべてのデータをソートされた形式にする場合は、述語は不要です。 'sortDescriptors = [NSSortDescriptor.init(key:" date "ascending:true)]'のようなものが動作するはずです。 –

答えて

14

述語は検索結果をフィルタリングするためのものです。ソートするには、NSSortDescriptorを使用する必要があります。あなたはDate型の日付と呼ばれるあなたの費用エンティティの属性を持っていると仮定すると:

func getData() { 
    let context = appDelegate.persistentContainer.viewContext 

    let fetchRequest = NSFetchRequest<Expenses>(entityName: "Expenses") 
    let sort = NSSortDescriptor(key: #keyPath(Expenses.date), ascending: true) 
    fetchRequest.sortDescriptors = [sort] 
    do { 
     expenses = try context.fetch(fetchRequest) 
    } catch { 
     print("Cannot fetch Expenses") 
    } 
} 

EDITを:私は、必要に応じて複数のソート記述子を追加できるようにソートセレクタが配列に追加されたことに言及している必要があります。例えば

+2

これはすべてを解決しました、ありがとうございました。しかし、この行が間違っ 'てみましょうfetchRequestである:':NSFetchRequest ( "費用" エンティティネーム:)NSFetchRequest = Expenses.fetchRequest() ' それは ' fetchRequestをさせなければなりません –

3

すべてのオブジェクトを特定の順序で取得するには、ソート記述子が必要です。

let sectionSortDescriptor = NSSortDescriptor(key: "date", ascending: true) 
let sortDescriptors = [sectionSortDescriptor] 
fetchRequest.sortDescriptors = sortDescriptors 
0

私の機能は、コアデータ内のデータのfetchRequestを実行し、結果を日付「タイムスタンプ」で降順に並べ替える機能です。 「Ruta」はエンティティの名前です。

//Array of Ruta entity 
    rutas = [Ruta]() 

    func getData() { 

     let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Ruta") 
     let sort = NSSortDescriptor(key: "timestamp", ascending: false) 
     request.sortDescriptors = [sort] 

     do { 
      rutas = try context.fetch(request) as! [Ruta] 
     } catch { 
      print("Fetching Failed") 
     } 
    }