Core Data Fetch Request für count

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Core Data Fetch Request für count

    Hallo zusammen,

    ich lerne gerade das Thema Core Data und habe die Aufgabe eine Abfrage zur Anzahl der Einträge zu erstellen. Dafür soll eine Meldung ausgegeben werden. Es funktioniert auch alles soweit wie gefordert. Nun meine Frage an euch, ob der Code so passt oder ich ggf. Zeilen verwende die nicht sein müssen. Wie gesagt ich stehe am Anfang und lerne noch, also bitte ich um Nachsicht <X
    Auf euer Feedback freue ich mich und bedanke mich schon einmal. :D

    Quellcode

    1. @IBAction func infoClicked(_ sender: AnyObject) {
    2. //den Delegaten beschaffen
    3. let appDelegate = NSApplication.shared.delegate as! AppDelegate
    4. //den Objektkontext beschaffen
    5. objektKontext = appDelegate.persistentContainer.viewContext
    6. //die Entität beschaffen
    7. let entitaet = NSEntityDescription.entity(forEntityName : "Adressen", in: objektKontext)
    8. //die Suchanfrage erzeugen
    9. let anfrage = NSFetchRequest<NSFetchRequestResult>()
    10. //die Entität zuweisen
    11. anfrage.entity = entitaet
    12. //die Suche definieren
    13. let suche = NSPredicate(format: "(nachname != NULL)")
    14. //und zuweisen
    15. anfrage.predicate = suche
    16. //die Suche ausführen
    17. do {
    18. let treffer = try objektKontext.fetch(anfrage)
    19. //liefert die Suche ein Ergebnis?
    20. if !treffer.isEmpty {
    21. //Gibt es einen Treffer?
    22. if treffer.count > 0 {
    23. let ergebnis = treffer.count
    24. //Ausgabe der Meldung wieviel Einträge es gibt
    25. meineMeldung(meinText: "Es befinden sich \(ergebnis) Einträge in der Datenbank")
    26. }
    27. }
    28. else {
    29. //Wenn keine Einträge vorhanden sind wird folgende Meldung ausgegeben
    30. meineMeldung(meinText: "Es wurden keine Einträge gefunden")
    31. }
    32. }
    33. catch {
    34. //Gab es bei der Suche einen Fehler
    35. meineMeldung(meinText: "Fehler!")
    36. }
    37. }
    Alles anzeigen
  • Für mich sieht das gut aus, bzgl. Swift-Spezifika müssen sich allerdings andere äussern. Falls Dich aber wirklich nur die Anzahl der Elemente aus dem Fetch interessiert (und nicht die Objekte selber), würde ich die Methode count des NSManagedContext einsetzen: Der Speicherbedarf und wahrscheinlich auch die Laufzeit dürften kleiner sein...

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • Ja MyMattes, da liegst du richtig es geht nur darum die Anzahl der Elemente anzuzeigen, der Inhalt ist irrelevant. wenn du sagst NSManagedContext müsste ich den Count schon nach der Definition objektKontext ansetzen können oder?
    Wenn das so ist, wie komme ich zu dem Zeitpunkt dann schon dazu, dass auf die Tabelle "Adressen" und das Feld "Nachname" zu filtern. Ich soll ja die Anzahl der befüllten Felder der Spalte Nachname zählen lassen.

    Hättest du mir da noch einen Hinweis? Büdde <X
  • Ich habe es mal ausprobiert und siehe da der Code ist auch kürzer ;)
    Es gibt auch das gewünschte Ergebnis aus. Ich habe es auch mal getestet in dem ich in die Tabelle einen Eintrag ohne Nachname erstellt habe.

    Mein Code sieht jetzt so aus, ist das so wie du es gemeint hast?

    Quellcode

    1. @IBAction func infoClicked(_ sender: AnyObject) {
    2. //den Delegaten beschaffen
    3. let appDelegate = NSApplication.shared.delegate as! AppDelegate
    4. //den Objektkontext beschaffen
    5. objektKontext = appDelegate.persistentContainer.viewContext
    6. //die Entität beschaffen
    7. let entitaet = NSEntityDescription.entity(forEntityName : "Adressen", in: objektKontext)
    8. //die Suchanfrage erzeugen
    9. let anfrage = NSFetchRequest<NSFetchRequestResult>()
    10. //die Entität zuweisen
    11. anfrage.entity = entitaet
    12. //die Suche definieren
    13. let suche = NSPredicate(format: "(nachname != '')")
    14. //und zuweisen
    15. anfrage.predicate = suche
    16. if let treffer = try? objektKontext.fetch(anfrage), treffer.count > 0 {
    17. let ergebnis = treffer.count
    18. meineMeldung(meinText: " Es befinden sich \(ergebnis) Einträge in der Datenbank")
    19. }
    20. else {
    21. //Wenn keine Einträge vorhanden sind wird folgende Meldung ausgegeben
    22. meineMeldung(meinText: "Es wurden keine Einträge gefunden")
    23. }
    24. }
    Alles anzeigen
  • Hallo MyMattes ,

    ich habe mir das jetzt nochmal angeschaut und wollte dich fragen ob du es so gemeint hast? Bin ich jetzt auf dem Weg?

    Quellcode

    1. @IBAction func infoClicked(_ sender: AnyObject) {
    2. var objektKontext: NSManagedObjectContext!
    3. //den Delegaten beschaffen
    4. let appDelegate = NSApplication.shared.delegate as! AppDelegate
    5. //den Objektkontext beschaffen
    6. objektKontext = appDelegate.persistentContainer.viewContext
    7. //die Entität beschaffen
    8. let entitaet = NSEntityDescription.entity(forEntityName : "Adressen", in: objektKontext)
    9. //die Suchanfrage erzeugen
    10. let anfrage = NSFetchRequest<NSFetchRequestResult>()
    11. //die Entität zuweisen
    12. anfrage.entity = entitaet
    13. //die Suche definieren
    14. let suche = NSPredicate(format: "(nachname != '')")
    15. //und zuweisen
    16. anfrage.predicate = suche
    17. do {
    18. let ergebnis = try objektKontext.count(for: anfrage)
    19. if ergebnis > 0 {
    20. meineMeldung(meinText: " Es befinden sich \(ergebnis) Einträge in der Datenbank")
    21. }
    22. else {
    23. //Wenn keine Einträge vorhanden sind wird folgende Meldung ausgegeben
    24. meineMeldung(meinText: "Es wurden keine Einträge gefunden")
    25. }
    26. }
    27. catch {
    28. meineMeldung(meinText: "Fehler!")
    29. }
    30. }
    Alles anzeigen