首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Core-Data:如何在一个关系中保存一个对象两次

Core-Data:如何在一个关系中保存一个对象两次
EN

Stack Overflow用户
提问于 2010-09-17 03:19:14
回答 2查看 695关注 0票数 2

假设我有一个与NSManagedObject B有多对多关系的NSManagedObject A,我有一个保存的A和B的实例(尚未关联)

现在我希望A将B的实例在其关系中保存两次,这当然是一个集合。但是,因为它是一个集合,所以它只存储B的一个引用。

请参阅:(未检查语法)

代码语言:javascript
复制
NSArray *tmpArray = [NSArray arrayWithObjects: B1, B1, nil];
[A setB: [NSSet setWithArray: tmpArray]];

->在该关系中只存储一个B。

有没有可能同时跟踪两个B?

EN

回答 2

Stack Overflow用户

发布于 2010-09-17 23:54:20

你不能这么做。核心数据维护的不是数组,而是对象图。

对象图存储对象之间的关系。因为每个对象都是唯一的,所以有重复的关系是没有意义的,因为这不传递任何信息。假设您有一个对象Person实例Jane,它具有一个brothers关系,其中包含三个对象:SteveJohnMike。与Steve有两个关系在逻辑上是无意义的,因为对象建模的真正Steve不是Jane的兄弟两次。即使Jane有两个叫Steve的兄弟,他们仍然是独立的个体,需要自己的对象在对象图中表示它们。

如果你发现自己认为你需要重复的关系,那么你可能误解了对象图的工作原理。

票数 4
EN

Stack Overflow用户

发布于 2012-05-27 22:40:52

我也有类似的问题,我搜索了一下,但什么也找不到。事实上,我对这段关系的思考是错误的。

这个应用程序在Board上按顺序排列了一堆Items,并进行了重复。

例如。做A,做B,做C,再做A,做D

我创建了一个很好的老式连接表,其中包含ItemBoard和板位BoardItemPositon

通过Board实体,您可以隐藏所有连接表的杂乱,并获取和设置一个数组。

代码语言:javascript
复制
@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;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3729979

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档