我正在尝试初始化数据,以便当用户第一次安装应用程序时它会有一些数据。 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 应该在数据库上创建数据,我将能够在视图上读取它......
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)
}
}
}
}
}
希望这会有所帮助!
我在这里找到了解决方案:苹果开发者论坛 https://developer.apple.com/forums/thread/132746
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)