首页 > 解决方案 > 为什么我的 SwiftUI 列表行并不总是在内部更新

问题描述

我有一个按完成和日期分组的提醒列表。数据来自称为 global 的 ObservedObject DataStore。我将 realmBinding 传递给单元格。单元格可以更新此绑定,它将触发数据存储更新。

List {
    // Past Due
    if self.global.pastDueReminders.count > 0 {
        Section(header: SectionHeader {}){
            ForEach(self.global.pastDueReminders) { reminder in
                NavigationLink(destination: ReminderDetail( reminder: reminder.realmBinding())) {
                    GeneralReminderCell(reminder: reminder.realmBinding())
                }
            }
        }
    }

    // Completed
    if self.global.completeReminders.count > 0 {
        // Same as PastDue but for Completed
    }
}

单元格看起来像:

struct GeneralReminderCell: View {
    @Binding var reminder:Reminder

    var body: some View {
        HStack(alignment:.top, spacing: 10) {
            Image(systemName: reminder.completed ? "checkmark.circle.fill" : "circle")
                .onTapGesture(perform:{ self.reminder.completed = !self.reminder.completed })
            VStack(alignment: .leading, spacing: 2) {
                Text("Follow up with \(reminder.client.fullName)").fontWeight(.semibold)
                if reminder.title.count > 0 {
                    Text(reminder.title)
                }

                Text(reminder.date.formatted()).foregroundColor(.gray)
            }
        }.padding(.vertical, 10)
    }
}

当点击图像时,它会切换提醒完成状态,并且它在列表视图中的位置会发生变化。完成后,点击的图像应更改为已填写的支票。这种行为几乎总是按预期发生,但有时检查的图像会与提醒的完成状态不同步。我已经研究了很长一段时间,并没有取得太大进展。为什么检查的图像并不总是与数据的状态相匹配?

标签: reactive-programmingswiftuiswiftui-list

解决方案


推荐阅读