一开始在安装应用时,我创建了一些对象,但在UI上创建后没有排序,我必须关闭应用,再打开应用,这样才能正确显示。这是代码。
import SwiftUI
struct ContentView: View {
@FetchRequest(
entity: ProgrammingLanguage.entity(),
sortDescriptors: [
NSSortDescriptor(keyPath: \ProgrammingLanguage.id, ascending: true)
]
) var languages: FetchedResults<ProgrammingLanguage>
@Environment(\.managedObjectContext) var managedObjectContext
var body: some View {
NavigationView {
VStack {
List(languages, id: \.self) { language in
Text(language.name ?? "Unknown")
}
}
}
.onAppear{
for i in 1...5 {
let language = ProgrammingLanguage(context: self.managedObjectContext)
language.name = "\(i) SwiftUI"
language.creator = "Some text"
do {
try self.managedObjectContext.save()
} catch {
}
}
}
}
}
我怎样才能让它在创建后自动排序?另外第一次创建时,屏幕上那部分出现空白,好像是UI不知道Core Data的变化。
问题似乎是在提供的代码中没有分配,因为命名属性由 id
意味着在CoreData中记下(默认情况下保持为0),所以至少在下面添加后,它是更新的&正确排序(在测试中模型id是Int32,但这并不重要)。
for i in 1...5 {
let language = ProgrammingLanguage(context: self.managedObjectContext)
language.id = Int32(i) // << here !!
language.name = "\(i) SwiftUI"
经Xcode 11.4 iOS 13.4测试。