所以,我正在创建这个涉及在表视图中创建例程的应用程序。在表视图中创建此例程后,您可以选择查看此例程。一旦你看到它,你会看到另一个表视图,每个视图包含一组任务,所有这些都是由用户创建的。我正在使用Core Data,我在我的数据模型中遇到问题,将任务分配给它所处的例程。模拟器中发生的事情是我创建的所有任务可以在所有例程中看到。这不是我想要的行为,我正在寻找的是每个例程都有自己独立的任务。你会怎么做?请记住,我正在使用核心数据。
答案 0 :(得分:1)
首先,您需要定义两个实体之间的关系。在模型编辑器中,按住Ctrl键从Routine
实体拖动到Task
实体。这将在两个实体之间创建一个新关系(由该行表示):
选择newRelationship
实体中的Routine
,并将其重命名为“任务”(位于右侧面板中),并将“类型”更改为“To Many” - 每个{{ 1}}可以有很多Routine
。同样,将Tasks
实体中的newRelationship
重命名为“例程”(您还应该决定每个Task
是否可以属于多个Task
,或者只有一个,并更改“输入“相应的;我认为它将是”To One“):
“箭头”表示“类型” - 单个表示“To One”,双表单表示“To Many”。 (您还应该查看CoreData文档并确定您想要的“删除规则”。)
这就是定义的关系。为了简化填充关系,值得为每个实体生成Routines
子类。然后,您可以使用点表示法访问其属性(和关系)。模型编辑器可以为您生成子类定义 - 在编辑器菜单中,“创建NSManagedObject子类”:
按照各种对话框操作,将为每个实体创建一个.swift文件。现在填充关系很容易 - 如果您有一个NSManagedObject
对象,比如Routine
,以及一个名为myRoutine
的{{1}}对象,请使用
Task
这会自动设置两种关系 - 从myTask
到myTask.routine = myRoutine
,反之亦然。
现在,在类型为myRoutine
的第二个视图控制器中定义一个属性(“myRoutine”)。当您从第一个视图控制器发出偏离时,请将myTask
的值设置为所选的Routine
。然后,在创建任何新的myRoutine
对象后,将其Routine
设置为myRoutine,如上所述。或者,如果您只显示所选例程的任务,则可以使用Task
(所选routine
的所有myRoutine.tasks
个对象的NSSet)作为表的数据源在第二个视图控制器中查看。