2017-11-28 5 views
0

Im Moment verwendet mein Code NSPredate oder Sortierungsdeskriptor, um einfach nur einen Namen zu sammeln. Ich möchte, dass NSPredate alle Namen von a-z sortiert, das ist es.sort coreData fetch (swift4)

COREDATAHANDLER

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

Viewcontroller

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

NSPredicates werden verwendet, um Daten zu filtern - die Ergebnisse sortieren Sie müssen NSSortDescriptors verwenden, zB. 'fetch.sortDescriptors = [NSSortDescriptor (Schlüssel:" Benutzername ", aufsteigend: true)]' – pbasdf

+0

@pbasdf würde ich das in das NSObject oder viewController einfügen? –

+0

Sie können die Sortierdeskriptoren beim Abrufen angeben (was wahrscheinlich am besten ist) oder Sie können sie verwenden, um das Array zu sortieren, das vom Abruf zurückgegeben wird. Ich empfehle die erste, also würde der Code in Ihren CoreDataHandler gehen. – pbasdf

Antwort

0

Wenn Sie Ihr user Array wollen von username sortiert werden und dann password, würde ich eine Klassenfunktion auf Ihre CoreDataHandler Klasse fügen Sie ein sortiertes Array zu erhalten :

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

Dann in Ihrem View-Controller, verwenden Sie diese neue Funktion, um die sortierten Array zu erhalten:

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

Wie würde ich den Benutzernamen zuerst aufsteigend sortieren und dann das Passwort in absteigender Reihenfolge sortieren. Zum Beispiel Benutzername: ben, Passwort: b, Benutzername: Ben, Passwort a. Versucht, ben, a und ben b. –

+0

Sie können mehrere Sortierdeskriptoren angeben, die der Reihenfolge nach verwendet werden - ich werde meine Antwort aktualisieren. – pbasdf