核心数据和多对多关系

时间:2012-08-21 23:07:46

标签: ios core-data

我有以下核心数据模型:

Core Data Model

也就是说,ach ItemCategory属于project(反向:categories),并且可以选择属于父ItemCategory(category,反向subcategories) - 请忽略其余的。

事实上,显然我无法为ItemCategory设置项目和父类别。每次我设置一个关系时,另一个关系设置为nil。我已经尝试了删除规则的每个组合,但似乎没有任何效果。

是否存在基本的核心数据限制,我不知道,或者我做错了什么?

2 个答案:

答案 0 :(得分:1)

您可以在两个实体之间建立多对多关系。重要的是每个关系都有自己的反转。假设我们有实体 A B ,我们希望它们之间有两对多的关系。你可以这样做。

我们将从

开始
A <<----->> B

您的 A 实体会产生一种关系,我们将其称为 bs ,并将其称为 。到目前为止,一切都很正常。

但是,没有什么能阻止你添加另一种关系:

  <<----->>
A           B
  <<----->>

对于第二种关系,我们将 A B 之间的关系命名为 otherBs ,并将其与 otherAs <的关系命名为 /强>

现在 A B 有两种关系,即 bs otherBs 。而另一种方式则与关系相同。

答案 1 :(得分:0)

我会投票支持“做错事”。 :)我刚用Project,ItemCategory,没有属性,没有其他实体,他们自己的关系尝试了最简单的形式......并且它没有显示该症状。此...

   Project *p = [NSEntityDescription insertNewObjectForEntityForName:@"Project" inManagedObjectContext:self.managedObjectContext];
   ItemCategory *c1 = [NSEntityDescription insertNewObjectForEntityForName:@"ItemCategory" inManagedObjectContext:self.managedObjectContext];
   ItemCategory *c2 = [NSEntityDescription insertNewObjectForEntityForName:@"ItemCategory" inManagedObjectContext:self.managedObjectContext];
   c1.category = c2;
   c1.project = p;

...给出...

(lldb) po c1.category (ItemCategory *) $2 = 0x06b98bd0 <ItemCategory: 0x6b98bd0> (entity: ItemCategory; id: 0x6b98ee0 <x-coredata:///ItemCategory/tB2F1219F-4FA5-48DA-871E-D9F9DC8E33E34> ; data: {
    category = nil;
    project = nil;
    subcategories =     (
        "0x6b82280 <x-coredata:///ItemCategory/tB2F1219F-4FA5-48DA-871E-D9F9DC8E33E33>"
    ); })
(lldb) po c1.project (Project *) $3 = 0x06b97a20 <Project: 0x6b97a20> (entity: Project; id: 0x6b97a70 <x-coredata:///Project/tB2F1219F-4FA5-48DA-871E-D9F9DC8E33E32> ; data: {
    categories =     (
        "0x6b82280 <x-coredata:///ItemCategory/tB2F1219F-4FA5-48DA-871E-D9F9DC8E33E33>"
    ); })

不幸的是,这并没有说明 可能是错误的,但它本身并不是一种限制。