【问题标题】:Filling a List in SwiftUI with CoreData使用 CoreData 在 SwiftUI 中填充列表
【发布时间】:2019-12-23 01:03:47
【问题描述】:

我正在尝试用我的“FlightRecording”实体中的所有条目填充一个列表。但我不能使用Text(recording.name),因为它说“NSManagedObject 没有成员'名称'”。 为什么这甚至是 NSManagedObject 而不是 'FlightRecordings' 类型的对象?

struct FlightRecorderBrowser: View {
    let flightRecordings: [FlightRecording] = FlightRecorder().fetchAllRecordings()
    var body: some View {
        NavigationView {
            List() {
                ForEach(flightRecordings, id: \.self) {recording in
                    Text(recording.name)
                }
            }

            .navigationBarTitle("Flight Recordings")
        }
    }
}

【问题讨论】:

    标签: swift core-data swiftui


    【解决方案1】:

    尝试向ForEach 闭包添加显式类型,因为记录可以同时是NSManagedObject 和FlightRecording,因此编译器决定使用NSManagedObject。

    ForEach(flightRecordings, id: \.self) { (recording: FlightRecording) in
        Text(recording.name)
    }
    

    编辑:如果recording.name 是可选的,则必须强制解包它或为 Text 提供替代方法才能使用该值。 recording.name! 或 recording.name ?? "default-text"

    另一个避免强制解包错误的选项是仅在 if recording.name != nil 时显示文本。

    【讨论】:

    • 然后我得到 ForEach 行的编译错误Cannot convert value of type 'ForEach<[FlightRecording], FlightRecording, Text>' to closure result type '_'
    • @nOk,只是为了澄清其他人:您不能将可选值传递给Text,因此您需要解开它或使用?? 运算符传递默认值。不幸的是 SwiftUI 在这里没有提供有意义的错误信息,所以它变得有点晦涩。
    • 在过去 2 小时左右一直停留在这个问题上。 Swiftui max 误导性错误,原来它只是一个需要强制解包的可选字符串-.-。谢谢,@nOk
    • 他们绝对应该在 Xcode 上工作,这样错误信息才会真正出现在错误中,而不是出现在之前或之后的随机代码中
    猜你喜欢
    • 1970-01-01
    • 2021-12-24
    • 1970-01-01
    • 2022-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-28
    • 2023-03-30
    相关资源
    最近更新 更多