假设我有一个与NSManagedObject B有多对多关系的NSManagedObject A,我有一个保存的A和B的实例(尚未关联)
现在我希望A将B的实例在其关系中保存两次,这当然是一个集合。但是,因为它是一个集合,所以它只存储B的一个引用。
请参阅:(未检查语法)
NSArray *tmpArray = [NSArray arrayWithObjects: B1, B1, nil];
[A setB: [NSSet setWithArray: tmpArray]];->在该关系中只存储一个B。
有没有可能同时跟踪两个B?
发布于 2010-09-17 23:54:20
你不能这么做。核心数据维护的不是数组,而是对象图。
对象图存储对象之间的关系。因为每个对象都是唯一的,所以有重复的关系是没有意义的,因为这不传递任何信息。假设您有一个对象Person实例Jane,它具有一个brothers关系,其中包含三个对象:Steve、John和Mike。与Steve有两个关系在逻辑上是无意义的,因为对象建模的真正Steve不是Jane的兄弟两次。即使Jane有两个叫Steve的兄弟,他们仍然是独立的个体,需要自己的对象在对象图中表示它们。
如果你发现自己认为你需要重复的关系,那么你可能误解了对象图的工作原理。
发布于 2012-05-27 22:40:52
我也有类似的问题,我搜索了一下,但什么也找不到。事实上,我对这段关系的思考是错误的。
这个应用程序在Board上按顺序排列了一堆Items,并进行了重复。
例如。做A,做B,做C,再做A,做D
我创建了一个很好的老式连接表,其中包含Item、Board和板位BoardItemPositon。
通过Board实体,您可以隐藏所有连接表的杂乱,并获取和设置一个数组。
@implementation Board
@dynamic boardItems;
- (void)setItems:(NSArray *)items{
//the ordered set of links
NSMutableOrderedSet *boardItemSet = [NSMutableOrderedSet new];
int i = 1;
for (Item *item in items) {
BoardItemPosition *boardItemPosition = (BoardItemPosition *)[NSEntityDescription insertNewObjectForEntityForName:@"BoardItemPosition"
inManagedObjectContext:[self managedObjectContext]];
NSNumber *num = [NSNumber numberWithInt:i++];
[boardItemPosition setItemPosition:num];
[boardItemPosition setItem:item];
[boardItemSet addObject:boardItemPosition];
}
//delete the old links
for (BoardItemPosition *boardItemPosition in [self boardItems]) {
[self.managedObjectContext deleteObject:[self.managedObjectContext objectWithID:boardItemPosition.objectID]];
}
//set the new links
[self setBoardItems:boardItemSet];
}
- (NSArray *)items{
//pull out item and add to array
NSMutableArray *itemArray = [NSMutableArray new];
for (BoardItemPosition *boardItemPosition in [self boardItems]) {
[itemArray addObject:[boardItemPosition item]];
}
return itemArray;
}https://stackoverflow.com/questions/3729979
复制相似问题