【问题标题】:Observable Object to CoreData - Value of type 'NSSet?' has no subscriptsCoreData 的可观察对象 - “NSSet”类型的值?没有下标
【发布时间】:2021-05-03 13:45:02
【问题描述】:

这是我的模型配置

    class ModelsConfig: ObservableObject {
    @Published var lists: [ListModel] = []
    @Published var reminders: [Reminder] = []
}

这些都是我的模型

struct ListModel: Hashable {
    var color: String
    var text: String
    var reminders: [Reminder]
}
struct Reminder: Hashable {
    var title: String
    var notes: String
    var date: Date
    var index: Int
    var list: ListModel
}

在我能够在 ModelsConfig 的帮助下访问此视图中的索引之前

struct ListDetailView: View {
    @Binding var selectedIndex: Int
    @State var isSelected: Bool = false
    @EnvironmentObject var config : ModelsConfig

ForEach(config.lists[selectedIndex].reminders.indices, id: \.self) { reminderIndex in
                            HStack {
                                Button(action: {
                                    DispatchQueue.main.asyncAfter(deadline: .now() + 1){
                                        deleteReminder(at: reminderIndex)
                                    }
                                    
                                }, label: {
//                                    ReminderCell(reminder: list.reminders[reminderIndex])
                                    ReminderCell(reminder: config.lists[selectedIndex].reminders[reminderIndex])
                                })
                            }
                            .padding(.bottom)
                        }

现在,我正试图借助核心数据达到与此相同的索引

 @FetchRequest(sortDescriptors: [])
    var list: FetchedResults<CDListModel>
ForEach(list[selectedIndex].reminders.indices , id: \.self) { reminderIndex in
                HStack {
                            Button(action: {
                                DispatchQueue.main.asyncAfter(deadline: .now() + 1){
                                    deleteReminder(at: reminderIndex)
                                }
                                
                            }, label: {
                                ReminderCell(reminder: list[selectedIndex].reminders[reminderIndex])
                            })
                        }
                        .padding(.bottom)        
                    }

但它不允许我这样做。如何访问 coredata 中的索引?

【问题讨论】:

    标签: core-data swiftui indices


    【解决方案1】:

    在核心数据中,关系是(NS)Sets。出于性能原因,它们是无序的。

    最简单的解决方案是将集合转换为数组

    ForEach((list[selectedIndex].reminders.allObjects as! [CDReminder]).indices , id: \.self) { reminderIndex in
    

    考虑将关系声明为原生Set&lt;CDReminder&gt;。 Swift Sets 是一个序列并获得了索引。

    【讨论】:

      猜你喜欢
      • 2019-01-30
      • 1970-01-01
      • 1970-01-01
      • 2019-09-09
      • 2021-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多