对象创建后不排序 核心数据 SwiftUI

问题描述 投票:0回答:1

一开始在安装应用时,我创建了一些对象,但在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的变化。

swift core-data swiftui
1个回答
0
投票

问题似乎是在提供的代码中没有分配,因为命名属性由 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测试。

© www.soinside.com 2019 - 2024. All rights reserved.