【问题标题】:Objects not sorted after creation Core Data SwiftUI创建核心数据 SwiftUI 后未排序的对象
【发布时间】:2020-05-13 00:28:39
【问题描述】:

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

【问题讨论】:

  • 需要有关操作的更多详细信息。
  • 感谢您的浏览,我更新了帖子@Asperi
  • 不,排序是正确的。我需要按 id 对其进行排序,因此当它们被创建 1、2、...时,它们会遵循该顺序 @Asperi 你能告诉我一个简单的例子,我可以在创建时创建和排序这种数据吗?
  • @Asperi 我将代码更新为可能复制正在发生的事情的最简单示例

标签: swift core-data swiftui


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2011-02-01
    • 1970-01-01
    • 2022-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-29
    相关资源
    最近更新 更多