您将如何创建一个 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
这将自动设置双向关系 - 从 myRoutine
到 myTask
,反之亦然。
现在,在类型为 Routine
的第二个视图控制器中定义一个 属性 ("myRoutine")。当您从第一个视图控制器开始时,将 myRoutine
的值设置为所选的 Routine
。然后,在创建任何新的 Task
对象后,将它们的 routine
设置为 myRoutine,如上所述。或者,如果您只显示所选例程的任务,则可以使用 myRoutine.tasks
(这是所选 Routine
的所有 Task
对象的 NSSet)作为 table 在你的第二个视图控制器中查看。
所以,我正在创建这个涉及在 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
这将自动设置双向关系 - 从 myRoutine
到 myTask
,反之亦然。
现在,在类型为 Routine
的第二个视图控制器中定义一个 属性 ("myRoutine")。当您从第一个视图控制器开始时,将 myRoutine
的值设置为所选的 Routine
。然后,在创建任何新的 Task
对象后,将它们的 routine
设置为 myRoutine,如上所述。或者,如果您只显示所选例程的任务,则可以使用 myRoutine.tasks
(这是所选 Routine
的所有 Task
对象的 NSSet)作为 table 在你的第二个视图控制器中查看。