2017-02-27 69 views
3

我有一個函數getData()它檢索核心數據實體,我想按日期排序它們。我如何應用NSPredicate或Predicate從CoreData獲取按日期排序的數據?按日期排序 - 斯威夫特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。假設你有一個類型爲日期的日期您的費用實體的屬性:

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

編輯:我應該提到的是,排序選擇已在陣列中添加,使多個種類的描述如果需要,可以加入。例如按日期排序,然後按腿數,然後按體積等排序。

+2

這解決了一切,非常感謝。但是,這條線是不正確的 '讓fetchRequest:NSFetchRequest = Expenses.fetchRequest()' 應該 '讓fetchRequest:NSFetchRequest (的entityName: 「費用」)' –

3

您需要一個排序描述符以特定順序獲取所有對象。

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

我的函數在Core Data中執行fetchRequest數據並按日期「timestamp」按降序排列結果。 「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") 
     } 
    }