4

I'm trying to build a SwiftUI view with data from Core Data. One of the entities has a one-to-many relationship with another entity. I have a basic master detail type with a NavigationLink to a second view which should be the equivalent of a detail view. I can in fact list all of the details for the second entity except for the Set of related objects.

Relevant entities:

public class Regimen : NSManagedObject, Identifiable {
    @NSManaged public var id: UUID
    @NSManaged public var name: String?
    //...more

    @NSManaged public var drugObjects: Set<DrugObject>
}

public class DrugObject : NSManagedObject, Identifiable {
    @NSManaged public var id: UUID
    @NSManaged public var name: String?
    //...more

    @NSManaged public var regimen: Regimen
}

The master list:

struct RegimenListView: View {
    @Environment(\.managedObjectContext) var managedObjectContext
    @FetchRequest(fetchRequest: Regimen.getAllRegimens()) var myRegimens
    var body: some View {
        NavigationView {
            List {
                ForEach(myRegimens, id: \.self) { mr in
                    NavigationLink(destination: RegimenDetailView(regimen: mr)) {
                        Text(mr.name ?? "no regimen name")
                    }
                }
            }.navigationBarTitle("Regimens")
        }
    }
}

The detail list:

struct RegimenDetailView: View {
    var regimen: Regimen
    var body: some View {
        //let da: [DrugObject] = Array(regimen.drugObjects)
        return NavigationView {
            VStack {
                Text(regimen.name ?? "no regimen name")
                List {
                    ForEach(regimen.drugObjects, id: \.self) { x in
                        Text(x.name ?? "no drugObject name")
                    }
                }
            }
        }
    }
}

If I try to build as listed above, I get an error on the ForEach line: Generic struct 'ForEach' requires that 'Set' conform to 'RandomAccessCollection'

If I first try to convert to an Array, it blows up with the error: Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[MyChems.DrugObject copyWithZone:]: unrecognized selector sent to instance '

Any guidance would be appreciated. Xcode 11.6 iOS 13.6

1 Answer 1

2

Try to add

extension DragObject: NSCopying {
    func copy(with zone: NSZone? = nil) -> Any {
        return self
    }
}

and use

List {
    ForEach(Array(regimen.drugObjects), id: \.self) { x in
        Text(x.name ?? "no drugObject name")
    }
}
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.