【问题标题】:Cocoa: Core Data relationships not workingCocoa:核心数据关系不起作用
【发布时间】:2010-02-14 07:49:14
【问题描述】:

我有一个像这样的基本核心数据模型:

-类名(字符串)

关系:HasDetails (to many) -to Details

详情

-数字(整数)

-名称(字符串)

关系:IsPartOfClass -to Class

我有两个表视图,一个用于“类”,一个用于“详细信息”,并设置了所有绑定,但是,当我向详细信息添加一个新对象时,它会在我需要时显示给所有类只显示一个,选定的一个

【问题讨论】:

    标签: cocoa core-data entity-relationship


    【解决方案1】:

    这里缺少很多信息,您对实体的描述令人困惑。我强烈建议您在未来花时间提供更多详细信息。

    听起来好像你有一个类>细节(一对多的关系:一个类有很多细节,一个细节有一个类)。对吗?

    假设类的详细信息关系称为“详细信息”,详细信息的类关系称为“类”,并且在您的托管对象模型中正确设置了所有内容(反向关系几乎总是正确的做法),您'想要以下内容:

    1. “类”数组控制器设置为实体模式,实体名称设置为“类”。 managedObjectContext 也需要绑定。您的 Classes 表视图将绑定到此。
    2. “详细信息”数组控制器,也设置为实体模式,实体名称为“详细信息”。您将其“contentSet”绑定到类数组控制器的“selection.details”。这将只为您的 Details 数组控制器提供所选类的详细信息。 managedObjectContext 也需要绑定。您的详细信息表视图将绑定到此。

    通过这样做,调用 Details 数组控制器的 -add: -insert: 和 -delete:(或者是“-remove:”?)方法(例如从按钮)将自动正确处理关系(将添加将新的“详细信息”实例添加到所选“类”实例的详细信息集。

    确保将添加/插入/删除按钮的启用状态绑定到阵列控制器的“canAdd”和“canRemove”(或者是“canDelete”?)属性,以便在所需选项中没有选择时禁用它们地点。

    【讨论】:

    • 那是因为你在看数据模型,而我们不是。当问题与关系有关时,没有关于关系的真实信息的简单文本描述就没有很多了。
    • 抱歉,我之前的评论听起来比我预期的要简洁。
    • 我认为评论很到位,TechZen。我的和你的都不是攻击,而是诚实的声明。马特,当你向别人寻求帮助时,当他们说需要澄清时,最好不要争论。他们这样做是为了帮助您,并且认为这一点不会为您赢得良好的声誉,尤其是在像 SO 这样的网站上。
    • 好吧,我在不上传整个数据模型的情况下尽可能清楚地说明了
    【解决方案2】:

    马特,让我猜猜你想做什么:

    您需要一个类数据库,每个类都有一个名称和一个编号。这不需要单一的关系,而且很容易实现!

    在数据模型视图的右上方窗格中,您可以创建您的类、“类”或其他任何内容,然后在右侧的下一个窗格中,您可以按“+”按钮为属性“添加属性”您将标题为“名称”和“编号”。在此视图的最右侧列中,选择“字符串”作为名称,选择“整数”作为数字。

    在界面生成器中,您将向模型视图添加一个数组控制器,然后选择您的数组控制器,进入绑定检查器,打开“ManagedObjectContext”的底部选项卡,然后选择“文件所有者的”managedObjectContext(记住在你的 View Controller 中声明它,并在 dealloc 方法定义中释放它)。

    我怀疑您只需要一个表格视图,但有多个列。单击表格视图两次,在属性检查器中将列设置为 3。然后单独选择每一列,然后再次在绑定检查器中,将每一列的值设置为您希望它显示的数组控制器的属性。

    添加几个绑定到数组控制器的“添加”和“删除”方法的按钮,您应该进行设置。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-30
      相关资源
      最近更新 更多