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 中的核心数据的主要内容,如果未能解决你的问题,请参考以下文章
核心数据对象仍然保存在presentationMode SwiftUI中的dismiss/cancel