swift - 在 CoreData 中排序(swift)
问题描述
如何在 CoreData 中使用排序?我想按属性对它们进行排序,也就是时间
我也想使用这两个线程。有人知道如何使用这两个:
fetchOffset <===========
fetchLimit <===========
final class PersistantManager {
private init(){}
static let shared = PersistantManager()
// MARK: - Core Data stack
lazy var persistentContainer: NSPersistentContainer = {
let container = NSPersistentContainer(name: "_chans_")
container.loadPersistentStores(completionHandler: { (storeDescription, error) in
if let error = error as NSError? {
fatalError("Unresolved error \(error), \(error.userInfo)")
}
})
return container
}()
lazy var context = persistentContainer.viewContext
// MARK: - Core Data Saving support
func save () {
let context = persistentContainer.viewContext
if context.hasChanges {
do {
try context.save()
print("success save")
} catch {
let nserror = error as NSError
fatalError("Unresolved error \(nserror), \(nserror.userInfo)")
}
}
}
func fetch<T: NSManagedObject>(_ objectType : T.Type) -> [T] {
let entityname = String(describing: objectType)
let fetchrequest = NSFetchRequest<NSFetchRequestResult>(entityName: entityname)
do {
let fetchedobject = try context.fetch(fetchrequest) as? [T]
return fetchedobject ?? [T]()
}catch{
print(error)
return [T]()
}
}
}
和我的 fetch 代码:
guard let Bookmarks = try! PersistantManager.shared.context.fetch(HistoryBookmarks_Coredata.fetchRequest()) as? [HistoryBookmarks_Coredata] else {return}
解决方案
您需要做的就是设置获取请求的排序描述符。
// replace "key" with the property you want to sort by
let sort = NSSortDescriptor(key: "key", ascending: false)
let fetchrequest = NSFetchRequest<NSFetchRequestResult>(entityName: entityname)
fetchrequest.sortDescriptors = [sort]
fetchLimit指定要获取的最大记录数。
fetchOffset允许您跳过指定数量的行。
如果您想知道属性的用途,文档是一个很好的起点。
推荐阅读
- ios - 手动将 UDID 添加到 Xcode 10?
- c - C忽略结构前面的const限定符
- javascript - 从 Blob URL 下载 PDF
- java - Java 静态方法、通配符/通用返回类型
- python-3.x - 以管理员身份运行的 Visual Studio 代码不会运行代码
- c - Linux timer_setup 函数
- linux - 将 libv8-3.14 的外部库实例安装到文件夹
- python-3.x - 查询 S3 存储桶文件日期的 Boto3 脚本速度很慢
- python - 调用随机方法时,MagicMock 如何避免抛出 AttributeError?
- c - 当我尝试重新创建管道/分叉一个新进程时,进程卡住了