父对象的核心数据列表关系

卡塔兰

我有两个核心数据实体。一种叫做“程序”,另一种叫做“运动”。程序与运动有一对多的关系。

我在另一个视图中将“练习”添加到“程序”中。我有一个列出了所有程序的视图,并且有一个导航链接指向该视图。

在此视图中,我想列出我之前分配给程序的所有练习。但是,如果尝试此代码,则会收到错误消息:通用结构'ForEach'要求'Exercise'符合'RandomAccessCollection'。

我是Core Data Relationships的新手,并且认为我可能忘记了在CoreDataClass File中声明某些内容。问题是我找不到这个问题的其他解决方案。

struct ProgramView: View {

@ObservedObject var ProgramDetail: Program

var body: some View {
            List {
                ForEach(ProgramDetail.exercise!, id: \.self) { exercise in
                    Text(exercise.name!)
                }
         }

这将生成所有程序的列表:

struct ProgramList: View {
    @Environment(\.managedObjectContext) var viewContext
    @FetchRequest(sortDescriptors: [NSSortDescriptor(keyPath: \Program.date, ascending: false)]) var programFetch: FetchedResults<Program>

    
    var body: some View {
        NavigationView {
                List {
                    ForEach(programFetch, id: \.self) { program in 
                        NavigationLink(destination: ProgramView(ProgramDetail: program)) { 
                            Text(program.title!)
                        }
                    }
                }.navigationBarItems(
                    trailing:
                        NavigationLink(destination: CreateProgram()) {
                            Image(systemName: "plus.circle").font(.system(size: 25))
                        })
      }
}

这是界面的屏幕截图?:

接口

安德鲁建设者

错误消息说明您必须具有随机访问集合,以便ForEach可以迭代该集合。

例如,SwiftArray遵循RandomAccessCollection协议,因此您可以使用数组。

我建议您在Swift文档Apple的Developer网站阅读集合

解决方案可能有几种方法,但也许最简单的方法如下:

struct ProgramView: View {
    
    @ObservedObject var programDetail: Program
    
    @FetchRequest(entity: Exercise.entity(),
                  sortDescriptors: [NSSortDescriptor(keyPath: \Exercise.name, ascending: true)],
    ) var allExercises: FetchedResults<Exercise>
    
    var body: some View {
        List {
            // in this line you create an array of fetched results
            // filtered to contain only exercises for programDetail
            let exercisesForProgram = allExercises.filter { $0.program == programDetail }
            
            ForEach(exercisesForProgram) { exercise in
                Text(exercise.name!)
            }
        }
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

对象之间的核心数据关系

来自分类Dev

核心数据关系和父实体-购物车

来自分类Dev

核心数据多对多关系在将对象添加到父实体时创建重复项

来自分类Dev

核心数据添加对象多对多关系

来自分类Dev

核心数据:NSFetchedResultsController与对象之间存在关系

来自分类Dev

从核心数据中的关系中删除对象的正确方法

来自分类Dev

SWIFT的核心数据:如何从关系实体中删除对象?

来自分类Dev

核心数据关系中出现不需要的对象

来自分类Dev

核心数据-多对多关系中对象的顺序

来自分类Dev

如何与核心数据中的现有对象建立关系

来自分类Dev

核心数据:NSFetchedResultsController与对象之间存在关系

来自分类Dev

核心数据:在多对多关系中获取相关对象

来自分类Dev

关系的核心数据属性?

来自分类Dev

与核心数据的关系故障

来自分类Dev

核心数据-关系查询

来自分类Dev

核心数据继承与关系

来自分类Dev

核心数据:与关系混淆

来自分类Dev

核心数据关系问题

来自分类Dev

核心数据,嵌套列表

来自分类Dev

核心数据如何过滤(NSPredicate)包括一个关系需求和给定的关系对象?

来自分类Dev

核心数据中与自我的关系

来自分类Dev

核心数据与一对多关系

来自分类Dev

UITableView核心数据分组和关系

来自分类Dev

核心数据NSFetchedResultsController对多关系

来自分类Dev

何时不使用核心数据关系

来自分类Dev

如何检测核心数据关系的变化?

来自分类Dev

核心数据-按关系选择

来自分类Dev

Swift的核心数据-父子关系

来自分类Dev

核心数据模型-关系