假设我有一个核心数据实体ShapesEntry,它包含几个关系:
ShapeInstance实体有三个属性:numSides,edgesLength,color。反向ShapeEntry。
String_Container实体有一个属性:stringValue。反向ShapeEntry。
ShapesEntry的目的是包含现有形状的所有实例,以及跟踪每个记录的形状实例使用的不同numSides,edgesLengths和颜色。
例如:
^添加这些形状实例后,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];
...上面的代码呈现了sideCounts,edgeLengths和{3,4,4,3},{5,5,10,10}和{RED,GREEN,BLUE,GREEN}和addObject的颜色方法不会将它们识别为不同。
我可以获取相应的ShapeEntry(这个例子是dumbed down,所以这里只有其中一个存在,但在我的代码中你可能有数千个),遍历每个关系的现有属性并确认值I想要添加尚未存在但是,当我真正想要的是关系从一开始就像NSSet一样行事时,这看起来非常昂贵。我确实认识到,从技术上讲,这种关系正在发挥作用,因为我想要添加的对象是不同的对象'尽管具有相同的属性值,但我希望它更深入一点,并在尝试添加到ShapeEntry关系之前确认这些属性值是不同的。
我该如何完成这项任务?如果我的例子令人困惑,请要求澄清......我在现场做了所以我希望我的变量名称是一致的......
提前致谢!!
答案 0 :(得分:0)
使用键值编码方法
NSSet *colors = [shapeEntry valueForKeyPath:@"shapeInstances.color"];
您获得与shapeEntry
相关的形状实例的所有颜色值,同样的效果
对于其他属性。这似乎是
比复制所有信息更容易。
如有必要,您仍然可以在colors
的瞬态属性中“缓存”ShapeEntry
集。