SwiftUI 中的核心数据

Posted

技术标签:

【中文标题】SwiftUI 中的核心数据【英文标题】:Core data in SwiftUI 【发布时间】:2020-04-25 09:58:41 【问题描述】:

试图在 SwiftUI 中实现核心数据,我碰壁了。 根据许多教程,我编写了以下项目,大概完全按照说明进行,但应用程序无法构建。

我被困在一个非常早期的阶段,所以我希望有人可以在这里提供帮助。

我在 XCDtatamodel 中创建了 2 个实体,每个实体都有一个名为“airportName”的字符串属性 我只是尝试显示其中一个实体的列表:
import SwiftUI
import CoreData

struct ContentView: View 

    @Environment(\.managedObjectContext) var managedObjectContext

    @FetchRequest(entity: Takeoffs.entity(), sortDescriptors: [NSSortDescriptor(keyPath: \Takeoffs.eventDate, ascending: false)]) var fetchedTakeoffs: FetchedResults<Takeoffs>

    var body: some View 

        List 
            ForEach (fetchedTakeoffs, id: \.self)  item in
                Text(item.airportName) // THIS IS WHERE I GET THE ERROR

            
        
    


struct ContentView_Previews: PreviewProvider 
    static var previews: some View 
        let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
        return ContentView().environment(\.managedObjectContext, context)
    

但是 Xcode 告诉我“'NSManagedObject' 类型的值没有成员 'airportName'” 这就像我的 XCDatamodel 没有连接到应用程序。

我通过选中 SwiftUI,使用 CoreData 复选框来创建项目。

完整的代码可以在这里找到:

https://github.com/Esowes/RecentExp

感谢您的任何指点。

【问题讨论】:

【参考方案1】:

我能够构建它。但不确定它会按照您的预期运行。请通过。我认为 takeOff 项目的属性是可选的,您会遇到错误。

List 
    ForEach (fetchedTakeoffs, id: \.self)  item  in
       Text(item.airportName ?? "")
    

【讨论】:

谢谢乔伊,“可选”的角度是正确的。除了我声明为 UUID 的 identNumber 之外,我在所有实体的属性中都取消了可选选项。这会是个问题吗? UUID 不是自动生成的吗?在我的列表中执行 ForEach 循环时,我可能需要它们... @Esowes。 UUID 背后的想法是,它是一个唯一的长字符串,用于所有实际目的。假设在 youtube 中,名称可能相同,或者 2 个视频的作者或音乐剧相同。等等......如果你想唯一地识别每个对象,可以使用它。 no uuid 默认不生成。使用这是获取和存储数据的更好做法。如果您接受答案,我将非常高兴。它可以推动我。只有我的回答对你有帮助。

以上是关于SwiftUI 中的核心数据的主要内容,如果未能解决你的问题,请参考以下文章

如何使用核心数据将对象传递给 SwiftUI 中的其他视图

SwiftUI - 如何切换核心数据中的所有布尔值

SwiftUI 核心数据

核心数据对象仍然保存在presentationMode SwiftUI中的dismiss/cancel

在@FetchRequest 中输入一个动态值,以从 SwiftUI 中的核心数据中获取单个实体

SwiftUI Picker 多个错误,核心数据,布局