排序 coreData 获取 (swift4)

2 sorting class core-data nspredicate ios

现在我的代码使用 NSPredicate 或排序描述符来基本上只是收集一个名称。我希望 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
    }
}
Run Code Online (Sandbox Code Playgroud)

视图控制器

  user = coreDataHandler.filterData()
    for i in user! {
        print("Judou : \(i.username!)")
    }
Run Code Online (Sandbox Code Playgroud)

pba*_*sdf 7

如果您希望您的user数组按username和 then排序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
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在您的视图控制器中,使用这个新函数来获取已排序的数组:

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