簡體   English   中英

排序coreData提取(swift4)

[英]sort coreData fetch (swift4)

現在,我的代碼使用NSPredicate或sort描述符基本上只是收集一個名稱。 我想NSPredicate從az多數民眾贊成在排序所有名稱。

核心數據處理程序

class coreDataHandler: NSObject {

private class func getContext() -> NSManagedObjectContext{

    let appDelegate = UIApplication.shared.delegate as! AppDelegate
    return appDelegate.persistentContainer.viewContext
}
class func saveObject(username:String, password:String) -> Bool{
 let context = getContext()
    let entity = NSEntityDescription.entity(forEntityName: "User", in: context)
    let managedObject = NSManagedObject(entity: entity!, insertInto: context)

    managedObject.setValue(username, forKey: "username")
  managedObject.setValue(password, forKey: "password")
    do {
        try context.save()
        return true
    } catch {
        return false}



    }
 class func filterData() -> [User]? {
    let conttext = getContext()
    let fetchRequest:NSFetchRequest<User> = User.fetchRequest()

    var user:[User]? = nil

    var predicate = NSPredicate(format: "username contains[d] %@" ,"duke")

    fetchRequest.predicate = predicate
    do {
        user = try conttext.fetch(fetchRequest)
        return user
    }catch {
        return user
    }
}

視圖控制器

  user = coreDataHandler.filterData()
    for i in user! {
        print("Judou : \(i.username!)")
    }

如果您希望您的user數組按username然后按password排序,我將向您的CoreDataHandler類添加一個類函數以獲得排序后的數組:

class func getSortedData() -> [User]? {
    let conttext = getContext()
    let fetchRequest:NSFetchRequest<User> = User.fetchRequest()

    var user:[User]? = nil

    var nameSort = NSSortDescriptor(key:"username", ascending:true)            
    var passwordSort = NSSortDescriptor(key:"password", ascending:false) 

    fetchRequest.sortDescriptors = [nameSort, passwordSort]
    do {
        user = try conttext.fetch(fetchRequest)
        return user
    } catch {
        return user
    }
}

然后在您的視圖控制器中,使用此新函數獲取排序后的數組:

user = coreDataHandler.getSortedData()
for i in user! {
    print("Judou : \(i.username!), Password:\(i.password)")
}

在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: "username", 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
            var   password:String = result.value(forKey: "password")! as! String

            print("username==>",username)
            print("name==>",name)

        }


    } catch let error as NSError {
        print("Could not fetch. \(error), \(error.userInfo)")
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM