I have a Core Data container with two entities, a Category and an Item. The Item can have one Category assigned and the Category can be assigned to many Items.
What I need to do is group the items by category in a list in SwiftUI.
The code below doesn't group all items by category, it only shows one item by category. How can I group all items that have the same category assigned under the same category group?
Core Data Entities
Category Attributes name Relationship items (Type: To Many) Item Attributes name Relationship category (Type: To One)
Swiftui
struct ItemsView: View { let selectedList:List @EnvironmentObject private var itemSM: ItemServiceModel var body: some View { List { ForEach(itemSM.items) { item in Section(header: Text(item.category?.name ?? "")) { ForEach(itemSM.items.filter { $0.category == item.category }) { filteredItem in Text("\(filteredItem.name ?? "")") } } } } .onAppear{ itemSM.loadItems(forList: selectedList) } } }
Service Item Service Model
class ItemServiceModel: ObservableObject{ let manager: CoreDataManager @Published var items: [Item] = [] func loadItems(forList list: List){ let request = NSFetchRequest<Item>(entityName: "Item") let sort = NSSortDescriptor(keyPath: \Item.name, ascending: true) request.sortDescriptors = [sort] let filter = NSPredicate(format: "list == %@", list) request.predicate = filter do{ items = try manager.context.fetch(request) }catch let error{ print("Error fetching items. \(error.localizedDescription)") } } }
This is what I see, as you can see, only one Fruits & Vegetables
section should exist.