我想做什么:将对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
  • 的值
  • 文字字符串,可用于加载本地化字符串

  • ios - SwiftUI:如何将核心数据对象传递给 View ?-LMLPHP

    因此,您将需要对传递给LogRectangle的模型进行一些更改。这些更改可以在数据模型级别进行(然后更新关联的NSManagedObject类),或者您可以在模型上具有计算属性,以提供该属性的非可选值。

    10-08 05:33
    查看更多