List mit children aus Core Data

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

  • List mit children aus Core Data

    Moinsen,

    hoffe, der Thread ist hier richtig, weil es ja sowohl um Core Data, SwiftUI und Swift geht.

    Mein Problem: ich möchte gerne die List mit dem Parameter "children" nutzen (s. developer.apple.com/documentat…eating-hierarchical-lists ) und zwar mit meinen FetchedResults aus der Core Data Datenbank.

    Allerdings komme ich hier immer wieder in Sackgassen.

    Datenbank ganz simpel eine Entity mit drei Attributen (id, title, date) und einer Relationship ( m:m auf sich selber).

    Mein Code für die List sieht dann wie folgt aus:


    Quellcode

    1. List (items, children: \.children) { item in
    2. // Bla bla
    3. }
    Das mag xcode aber nicht. Fehler: Key path value type 'NSSet?' cannot be converted to contextual type 'FetchedResults<Item>?'

    Jetzt ist children halt leider ein Set, es wird aber ein FetchedResults erwartet...
    das überfordert mich etwas. :)

    Hat jemand hier schon Erfahrungen gemacht, wie man das am besten löst? Ich möchte eigentlich keine ForEach verwenden, weil ich damit ja nur eine weitere Ebene abbilden kann. Ich will aber beliebig viele Ebenen haben, was mit children ja gehen soll.

    Wäre für Tipps und Links dankbar.
  • OK, habe es jetzt so richtig hardcore mit ForEach() reingebastelt.

    Im ContentView:

    Quellcode

    1. List {
    2. ForEach(items, id: \.self) { item in
    3. ListItemView(item: item, padding: 0)
    4. }


    Und das ListItemView sieht wie folgt aus:


    Quellcode

    1. struct ListItemView: View {
    2. @ObservedObject var item: Item
    3. @State var padding: Double
    4. var body: some View {
    5. NavigationLink {
    6. Text(item.title ?? "")
    7. } label: {
    8. Text(item.title ?? "")
    9. .padding(.leading, padding)
    10. }
    11. if item.children != nil {
    12. ForEach(item.children?.allObjects as! [Item], id: \.self) { child in
    13. ListItemView(item: child, padding: padding + 10)
    14. }
    15. }
    16. }
    17. }
    Alles anzeigen
    Ist zwar nicht so wirklich das, was ich wollte, und wenn jemand eine elegantere Lösung hat, dann bin ich dankbar, aber sie funktioniert.