核心数据一对一关系抛出错误

时间:2015-10-09 11:23:08

标签: ios core-data xcode7

我有核心数据模型,如下图所示,需要一对一的关系。 enter image description here

enter image description here

当我尝试在核心数据实体中添加记录时。

#import "ViewController.h"
#import "MagicalRecord.h"
#import "Child.h"
#import "Parent.h"

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    Child *child = [Child MR_createEntity];
    child.name = @"Child";

    Parent *parent = [Parent MR_createEntity];
    parent.name = @"parent";
    parent.child = child;
}

Xcode会抛出如下错误。

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Unacceptable type of value for to-many relationship: property = "child"; desired type = NSSet; given type = Child; value = <Child: 0x7feec35bc840> (entity: Child; id: 0x7feec359af30 <x-coredata:///Child/tC70A9E87-948D-4407-AE19-73F9661A29372> ; data: {
name = Child;
parent =     (
);
}).

2 个答案:

答案 0 :(得分:0)

转到数据模型编辑器(图形编辑器样式),选择Parent与Child的关系,并确保您的关系如下所示: enter image description here

答案 1 :(得分:0)

从错误消息中,您似乎已将关系定义为&#34; to-many&#34;。这就是期望关系NSSetchild的原因(确实children更合适)。

假设您想要多对多关系(即父级可以有多个子级),请将关系重命名为复数,如上所述,并确保模型如下所示:

Parent <--------->> Child

然后最简单的方法是设置一对一的关系:

// add a child to a parent
child.parent = parent

显然,如果由于某种原因你确实需要一对一的关系,那么检查模型是否也反映了这一点。

Parent <----------> Child