您将如何创建一个 table 视图,使用 segue,在每个使用核心数据的单元格中有另一个 table 视图?

How would you create a table view that, using a segue, has another table view inside each cell using core data?

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

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

Select Routine实体中的newRelationship,并重命名为"tasks"(在右侧面板中),并更改"Type" 到 "To Many" - 每个 Routine 可以有很多 Tasks。同样将 Task 实体中的 newRelationship 重命名为 "routine"(您还应该决定每个 Task 是否可以属于多个 Routines,或仅属于一个,然后更改"Type" 相应地;我假设它将是 "To One"):

"Type" 由箭头表示 - 单箭头表示 "To One",双箭头表示 "To Many"。 (您还应该查看 CoreData 文档并决定您想要什么 "delete rule"。)

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

按照各种对话框进行操作,将为每个实体创建一个 .swift 文件。现在填充关系很容易 - 如果你有一个 Routine 对象,比如说 myRoutine,还有一个 Task 对象叫做 myTask,只需使用

myTask.routine = myRoutine

这将自动设置双向关系 - 从 myRoutinemyTask,反之亦然。

现在,在类型为 Routine 的第二个视图控制器中定义一个 属性 ("myRoutine")。当您从第一个视图控制器开始时,将 myRoutine 的值设置为所选的 Routine。然后,在创建任何新的 Task 对象后,将它们的 routine 设置为 myRoutine,如上所述。或者,如果您只显示所选例程的任务,则可以使用 myRoutine.tasks(这是所选 Routine 的所有 Task 对象的 NSSet)作为 table 在你的第二个视图控制器中查看。