假设我有一个核心数据实体 ShapesEntry,其中包含几个关系:
- shapeInstances (to-many w/ ShapeInstance Entity)
- sideCounts(对许多 w/ String_Container 实体)
- edgeLengths(对许多 w/ String_Container 实体)
- 颜色(对于许多 w/ String_Container 实体)
ShapeInstance 实体具有三个属性:numSides、edgesLength、颜色。与 ShapeEntry 相反。
String_Container 实体有一个属性:stringValue。与 ShapeEntry 相反。
ShapesEntry 的目的是包含现有形状的所有实例,并跟踪每个记录的形状实例使用的不同 numSides、edgeLengths 和颜色。
例如:
- (三角形):3-5-RED
- (方形):4-5-绿色
- (方形):4-10-蓝色
- (五角大楼):3-10-绿色
^ 添加这些形状实例后,GameEntry 应包括这四个 Shape 对象中的每一个,并且与 sideCounts、edgeLengths 和颜色的 NSSet 关系应包括 {3, 4}、{5, 10} 和 {RED, GREEN, BLUE} , 分别。
但是,因为 String_Container 是一个对象...
String_Container *sides = [NSEntity Description insertNewObjectForEntityForName:@"String_Container" inManagedObjectContext:context];
sides.stringValue = shapeInstance.numSides; //or edgesLength or color
[shapeEntry addSideCounts:sides];
...上面的代码渲染了 {3, 4, 4, 3}, {5, 5, 10, 10} 和 {RED, GREEN, BLUE, GREEN} 的 sideCounts、edgeLengths 和颜色,而 addObject 方法没有将它们识别为不同的。
我可以获取适当的 ShapeEntry(此示例已简化,因此此处仅存在其中 1 个,但在我的代码中可能有数千个),遍历每个关系的现有属性并确认我要添加的值尚不存在,但当我真正想要的是让关系从一开始就表现得像 NSSet 时,这似乎非常昂贵。我确实认识到从技术上讲这种关系正在发挥作用,因为我要添加的对象是“不同的对象”,尽管具有相同的属性值,但我希望它更深入并确认这些属性值在尝试之前是不同的添加到 ShapeEntry 关系。
我怎样才能完成这项任务?如果我的示例令人困惑,请要求澄清......我当场制作了它,所以希望我的变量名是一致的......
提前致谢!!