我想做什么:将对FetchRequest(此处来自:TestView)的NSManagedObject的引用传递给另一个子视图(此处:LogRectangle)。
我尝试了什么:
这些基本上是重要的几行:
List(testObjects, id: \.self) { habit in
LogRectangle(testObject: testObject)
}
这是整个代码:
struct TestView : View {
@Environment(\.managedObjectContext) var managedObjectContext
@FetchRequest(
entity: TestObject.entity(),
sortDescriptors: [NSSortDescriptor(keyPath: \TestObject.name, ascending: true)]
) var testObjects: FetchedResults<TestObject>
var body: some View {
NavigationView {
HStack {
Button(action: {
let testObject = TestObject(context: self.managedObjectContext)
habit.name = "TestObject String"
do {
try self.managedObjectContext.save()
} catch {
// handle the Core Data error
}
}) {
Text("Insert example TestObject")
}
List(testObjects, id: \.self) { habit in
LogRectangle(testObject: testObject)
}
}
.navigationBarTitle("Test")
}
}
}
struct LogRectangle : View {
var habit : TestObject
var body: some View {
Text(habit.name)
.font(.title)
.foregroundColor(.white)
}
}
在这里,我在类LogRectangle中的文本行上遇到此错误。
Cannot convert value of type 'String?' to expected argument type 'LocalizedStringKey'
最佳答案
您可能会遇到此错误,可能是因为属性name
被定义为数据模型中的可选字符串。Text
结构没有可选值。它必须是一个明确的值,即:
StringProtocol
因此,您将需要对传递给
LogRectangle
的模型进行一些更改。这些更改可以在数据模型级别进行(然后更新关联的NSManagedObject
类),或者您可以在模型上具有计算属性,以提供该属性的非可选值。