この質問/回答を使用して、ForEach を使用して、CoreData の 1 対多の関係から作成された NSOrderedSet を使用できますが、Core Data エンティティに格納されている文字列属性にアクセスできないようです。
Client と SessionNote の 2 つの CoreData エンティティがあります。クライアントは多数の SessionNotes、clientNotes の NSOrderedSet を持つことができ、SessionNote は 1 つのクライアントしか持つことができません。
クライアント + CoreDataClass.swift:
public class Client: NSManagedObject {
}
クライアント + CoreDataProperties.swift:
extension Client {
@nonobjc public class func fetchRequest() -> NSFetchRequest<Client> {
return NSFetchRequest<Client>(entityName: "Client")
}
@NSManaged public var firstName: String?
@NSManaged public var lastName: String?
@NSManaged public var id: UUID?
@NSManaged public var clientNotes: NSOrderedSet?
}
SessionNote+CoreDataClass.swift:
public class SessionNote: NSManagedObject {
}
SessionNote+CoreDataProperties.swift:
extension SessionNote {
@nonobjc public class func fetchRequest() -> NSFetchRequest<SessionNote> {
return NSFetchRequest<SessionNote>(entityName: "SessionNote")
}
@NSManaged public var date: Date?
@NSManaged public var noteText: String?
@NSManaged public var id: UUID?
@NSManaged public var clientOrigin: Client?
}
ここにClientDetailView.swiftがあります:
struct ClientDetailView: View {
@Environment(\.managedObjectContext) var moc
@ObservedObject var selectedClient: Client
var body: some View {
Form {
HStack {
Text("\(selectedClient.firstName ?? "") \(selectedClient.lastName ?? "")")
}
Section() {
ForEach(Array(selectedClient.clientNotes!.set), id: \.self) { note in
Text("This will repeat for the number of notes in the clientNotes NSOrderedSet")
/*
But instead I want to be able to display the noteText
string attribute stored in the SessionNote CoreData entity
instead of the above placeholder.
*/
}
}
}
}
}
試しましText("\(note.noteText ?? "")")
たが、次のエラーがスローされます。
タイプ 'AnyHashable' の値にメンバー 'noteText' がありません
試しText("\(self.selectedClient.clientNotes!.value(forKeyPath: \SessionNote.noteText))")
てみると、次のエラーがスローされます。
具象型のみがプロトコルに準拠できるため、プロトコル型 'Any' は '_FormatSpecifiable' に準拠できません
SessionNote noteTextエンティティごとに異なる文字列値を表示する方法はありますか?