【问题标题】:How would you create a table view that, using a segue, has another table view inside each cell using core data?您将如何使用 segue 创建一个表格视图,该表格视图使用核心数据在每个单元格内都有另一个表格视图?
【发布时间】:2015-04-14 05:23:27
【问题描述】:

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

【问题讨论】:

  • 展示(或解释)你的数据模型;听起来您有 routine 实体和 task 实体,但您没有定义或未填充它们之间的关系。
  • @pbasdf 我的模型相当简单。您几乎有两个主要对象:常规对象和任务对象。这些对象都有一个名称属性(字符串)。当用户单击添加按钮时,他们可以设置他们的名称值,并且在 done 函数中实际保存了他们的名称。但是,我还没有像你所说的那样建立或定义它们之间的关系,以便我能够实现所需的行为。

标签: swift core-data tableview cell


【解决方案1】:

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

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

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

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

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

myTask.routine = myRoutine

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

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

【讨论】:

猜你喜欢
  • 2012-09-04
  • 1970-01-01
  • 1970-01-01
  • 2017-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-21
  • 1970-01-01
相关资源
最近更新 更多