我有一个存储在核心数据中的课程实体,其变量之一是存储课程是否完成。
这些课程列在 SwiftUI 列表中,选择后会转到游戏所在的视图。游戏完成后,complete 变量将更新为 true。应该发生的情况是列表视图显示列出的游戏,并在游戏旁边显示一个复选标记。
然而,发生的情况是,当我在游戏中保存课程的“已完成”状态时(在 tapRight 方法中 - 见下文),我收到警告:
[TableView] 仅警告一次:UITableView 被告知在不位于视图层次结构中的情况下布局其可见单元格和其他内容(表视图或其超级视图之一尚未添加到窗口中)。
然后,当我通过按游戏视图顶部的导航按钮返回列表视图时,我发现游戏已从列表中消失。
但是,当我关闭应用程序并重新打开它时,列表中包含游戏行和复选标记,因此我知道核心数据课程实例正在正确更新。下面的列表视图代码。
import SwiftUI
import CoreData
import UIKit
struct LessonList: View {
@Environment(\.managedObjectContext) var moc
@State private var refreshing = false
private var didSave = NotificationCenter.default.publisher(for: .NSManagedObjectContextDidSave)
@FetchRequest(entity: Lesson.entity(), sortDescriptors: [], predicate: NSPredicate(format: "(type == %@) AND (stage == %@) AND ((complete == %@) OR (complete == %@))", "phonicIntro", "1", NSNumber(value: true), NSNumber(value: false) )) var phonicIntroLessons1: FetchedResults<Lesson>
var body: some View {
NavigationView {
List …Run Code Online (Sandbox Code Playgroud)