我有一个func getData()来检索核心数据实体,我想按日期对它们进行排序。如何应用NSPredicate或Predicate从CoreData获取按日期排序的数据?
我的核心数据实体: 实体:费用 属性: - 金额 - 类别 - 日期
func getData() {
let context = appDelegate.persistentContainer.viewContext
do {
expenses = try context.fetch(Expenses.fetchRequest())
} catch {
print("Cannot fetch Expenses")
}
}
感谢您的帮助!
答案 0 :(得分:33)
谓词用于过滤搜索结果。要对它们进行排序,您需要使用NSSortDescriptor。假设您的Expenses实体上有一个名为date of 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")
}
}
编辑:我应该提到排序选择器被添加到一个数组中,以便在需要时可以添加多个排序描述符。例如首先按日期排序,然后按腿数排序,然后按体积排序等
答案 1 :(得分:11)
您需要一个排序描述符来按特定顺序获取所有对象。
let sectionSortDescriptor = NSSortDescriptor(key: "date", ascending: true)
let sortDescriptors = [sectionSortDescriptor]
fetchRequest.sortDescriptors = sortDescriptors
答案 2 :(得分:2)
我的功能是在核心数据中执行fetchRequest数据并按日期排序结果&#34; timestamp&#34;按降序排列。 &#34;芸香&#34;是实体的名称。
//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")
}
}
答案 3 :(得分:1)
在Swift 4或Swift 5中,您可以使用类似
func sortlist(){
//1
guard let appDelegate =
UIApplication.shared.delegate as? AppDelegate else {
return
}
let managedContext =
appDelegate.persistentContainer.viewContext
//2
let fetchRequest =
NSFetchRequest<NSManagedObject>(entityName: "User")
let sort = NSSortDescriptor(key: "date", ascending: false)
fetchRequest.sortDescriptors = [sort]
//3
do {
let langugeCodes = try managedContext.fetch(fetchRequest)
for result in langugeCodes as [NSManagedObject] {
var username:String = result.value(forKey: "username")! as! String
print("username==>",username)
}
} catch let error as NSError {
print("Could not fetch. \(error), \(error.userInfo)")
}
}
答案 4 :(得分:0)
要获取首先添加的数据,需要将排序描述符的键设置为ObjectId。
let sectionSortDescriptor = NSSortDescriptor(key: #keyPath(Entity.ObjectId)
ascending: false) fetchRequest.sortDescriptors = [sectionSortDescriptor]