核心数据一对多记录插入错误

时间:2013-08-21 21:29:27

标签: core-data

我有三个实体

Forms{
    name:string
    jobs<-->>JSAjobs.form
}

JSAjobs{
    name:string
    form<<-->Forms.jobs
}

Jobs{
    step:string
    jobs<<-->Forms.jobs
}

我收到此错误:

  对于objectID 0x95afe60的

to-many relationship fault“jobs”。 。 。从数据库中完成。有0行

现在我稍后首先保存Forms实体的行,我需要在Form实体上获取最后一条记录,在JSAjobs上创建一个新行,详细信息如下{/ 1}}

由于

JSAjop

1 个答案:

答案 0 :(得分:0)

您的实体非常混乱,因为您没有选择可用的实体名称。你太困惑了,不能自己布置这些简单的关系。这导致代码混乱,并且不允许您以结构化的方式思考问题。

您的代码完全不可理解。尽管有一个取出的结果控制器(大概),你有一个数据阵列。代码的第二部分是一个神秘而神秘的新实体JOBsob。你无法提出这样一个有意义的问题,更不用说得到答案了。

你有嵌套数组,没有任何类型检查,这些数据必然会破坏,并且无论如何都无法调试。摆脱所有这些。

尽管如此,让我们试着让你开始吧:

首先,将复数用于实体名称是没有意义的。如果实体代表“表单”,则应为Form而不是Forms

也许你想要这个设置:

Form <<----> Job <----->> JobDetail

一份工作有很多表格和许多工作细节。因此,表单具有job的关系,而作业具有forms的关系。同样,Jobdetail的关系为job,而Job有关系details

当您拥有表单并创建新作业时,您只能为其分配一个作业。因此,旧的工作(如果有的话)将被打破。

oldForm.job = newJob; 

这是一种更安全的分配关系的方式。当然,为此目的,您已为这些实体创建了NSManagedObject子类。

但是,如果Job和Form之间的关系在另一个方向上是一对多的,那么您的方案将如下所示。

Form <---->> Job <------>> JobDetail

我现在真的不知道“形式”在这种情况下意味着什么 - 为了清楚起见,我将重命名为Project

Project <---->> Job <------>> JobDetail

现在,您可以将新作业分配给项目,并链接其他关系,如下所示:

newJob.project = existingProject; 
newJobDetail.job = newJob;