gpt4 book ai didi

swift - 初始化核心数据 SwiftUI

转载 作者:行者123 更新时间:2023-12-02 19:31:51 25 4
gpt4 key购买 nike

我正在尝试启动数据,以便当用户第一次安装应用程序时它会有一些数据。 init 不工作,但为什么呢?

对于核心数据上的 CRUD 操作,我使用一个 xcdatamodeld 文件,其中包含一个名为 ProgrammingLanguage 的实体,该实体具有两个字符串属性:“name”和“creator”。这是代码:

struct ContentView: View {

@Environment(\.managedObjectContext) var managedObjectContext

@FetchRequest(
entity: ProgrammingLanguage.entity(),
sortDescriptors: [
NSSortDescriptor(keyPath: \ProgrammingLanguage.name, ascending: true),
]
) var languages: FetchedResults<ProgrammingLanguage>

init() {

let language = ProgrammingLanguage(context: self.managedObjectContext)
language.name = "SwiftUI"
language.creator = "Some text"

do {
try self.managedObjectContext.save()
} catch {
}

}

var body: some View {
NavigationView {
List {
ForEach(languages, id: \.self) { language in
Button(action: {
}) {
Text("Creator: \(language.creator ?? "Anonymous")")
}

}
}
}
}
}

就好像没有保存它一样。这里发生了什么?该 init 应该在数据库上创建数据,我将能够在 View 上读取它......

最佳答案

SwiftUI

我建议使用 .onAppear() 修饰符来实现这一点。在您的代码示例中它将是:

struct ContentView: View {

@Environment(\.managedObjectContext) var managedObjectContext
@FetchRequest(
entity: ProgrammingLanguage.entity(),
sortDescriptors: [
NSSortDescriptor(keyPath: \ProgrammingLanguage.name, ascending: true),
]
) var languages: FetchedResults<ProgrammingLanguage>


var body: some View {
NavigationView {
List {
ForEach(languages, id: \.self) { language in
Button(action: {
}) {
Text("Creator: \(language.creator ?? "Anonymous")")
}

}
}.onAppear() {
let language = ProgrammingLanguage(context: self.managedObjectContext)
language.name = "SwiftUI"
language.creator = "Some text"
do {
try self.managedObjectContext.save()
} catch let error {
print(error)
}
}
}
}
}

希望这会有所帮助!我在这里找到了解决方案:Apple Developer Forum

关于swift - 初始化核心数据 SwiftUI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61667940/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com