如何创建一个表视图,使用segue,使用核心数据在每个单元格内部有另一个表视图?

时间:2015-04-14 05:23:28

标签: swift core-data tableview cell

所以,我正在创建这个涉及在表视图中创建例程的应用程序。在表视图中创建此例程后,您可以选择查看此例程。一旦你看到它,你会看到另一个表视图,每个视图包含一组任务,所有这些都是由用户创建的。我正在使用Core Data,我在我的数据模型中遇到问题,将任务分配给它所处的例程。模拟器中发生的事情是我创建的所有任务可以在所有例程中看到。这不是我想要的行为,我正在寻找的是每个例程都有自己独立的任务。你会怎么做?请记住,我正在使用核心数据。

1 个答案:

答案 0 :(得分:1)

首先,您需要定义两个实体之间的关系。在模型编辑器中,按住Ctrl键从Routine实体拖动到Task实体。这将在两个实体之间创建一个新关系(由该行表示):

Model Editor

选择newRelationship实体中的Routine,并将其重命名为“任务”(位于右侧面板中),并将“类型”更改为“To Many” - 每个{{ 1}}可以有很多Routine。同样,将Tasks实体中的newRelationship重命名为“例程”(您还应该决定每个Task是否可以属于多个Task,或者只有一个,并更改“输入“相应的;我认为它将是”To One“):

Model Editor after changing relationships

“箭头”表示“类型” - 单个表示“To One”,双表单表示“To Many”。 (您还应该查看CoreData文档并确定您想要的“删除规则”。)

这就是定义的关系。为了简化填充关系,值得为每个实体生成Routines子类。然后,您可以使用点表示法访问其属性(和关系)。模型编辑器可以为您生成子类定义 - 在编辑器菜单中,“创建NSManagedObject子类”:

Menu

按照各种对话框操作,将为每个实体创建一个.swift文件。现在填充关系很容易 - 如果您有一个NSManagedObject对象,比如Routine,以及一个名为myRoutine的{​​{1}}对象,请使用

Task

这会自动设置两种关系 - 从myTaskmyTask.routine = myRoutine ,反之亦然。

现在,在类型为myRoutine的第二个视图控制器中定义一个属性(“myRoutine”)。当您从第一个视图控制器发出偏离时,请将myTask的值设置为所选的Routine。然后,在创建任何新的myRoutine对象后,将其Routine设置为myRoutine,如上所述。或者,如果您只显示所选例程的任务,则可以使用Task(所选routine的所有myRoutine.tasks个对象的NSSet)作为表的数据源在第二个视图控制器中查看。