【问题标题】:Core Data "Deep Copy" between 2 MOC, handle To-Many relationship, using KVC collection proxy objectCore Data “Deep Copy” 2 MOC之间,处理To-Many关系,使用KVC集合代理对象
【发布时间】:2014-08-13 00:27:02
【问题描述】:

我正在尝试将托管对象从源持久存储区“深度复制”到现有持久存储区。借用任务代码以在目标上下文中建立多对多关系。完整代码可Here

我的困惑在于下面的方法

- (void)establishToManyRelationship:(NSString*)relationshipName
                         fromObject:(NSManagedObject*)object // “Copied Object" in TargetContext
                      withSourceSet:(NSMutableSet*)sourceSet // NSMutableSet in Source Context.
{
    if (!object || !sourceSet || !relationshipName) {
        NSLog(@"SKIPPED establishing a To-Many relationship from %@", [self objectInfo:object]);
        NSLog(@"Due to missing Info!");
        return;
    }

    //  Returns a mutable set proxy that provides read-write access to the unordered to-many relationship specified by a given key.
    NSMutableSet *copiedSet =[object mutableSetValueForKey:relationshipName];

    //in sourceContext, "Many"side of relationship represented by a Set, where "relatedObject" belongs to
    for (NSManagedObject *relatedObject in sourceSet) {

        // Related Copied Object in TargetContext
        NSManagedObject *copiedRelatedObject =
            [self copyUniqueObject:relatedObject toContext:object.managedObjectContext];

        if (copiedRelatedObject) {
            [copiedSet addObject:copiedRelatedObject];
            NSLog(@"A copy of %@ is now related via To-Many '%@' relationship to %@", [self objectInfo:object],
                  relationshipName,
                  [self objectInfo:copiedRelatedObject]);
        }
    }
    // REMOVE the relationship from memory after it is committed to disk
    [CoreDataImporter saveContext:object.managedObjectContext];

    [object.managedObjectContext refreshObject:object mergeChanges:NO];
}

我的问题是,之后

[copiedSet addObject:copiedRelatedObject];

,在“集合代理对象”(由 mutableSetValueForKey: 调用产生)上执行,并且没有从此方法返回任何结果(明确地通过参数或返回值)

- (void)establishToManyRelationship:(NSString*)relationshipName
                         fromObject:(NSManagedObject*)object 
                      withSourceSet:(NSMutableSet*)sourceSet

,如何确保在目标上下文中创建了一个 NSMutableSet(由复制相关对象组成)?或者我永远不需要在目标上下文中引用此类“复制集”?目标上下文中的对象图是否可以通过使用通过 KVC 实现的“集合代理对象”围绕“复制对象”(代表“多对多”关系的 ONE 端)神奇地建立?

【问题讨论】:

    标签: core-data collections kvc object-graph


    【解决方案1】:

    经过几次测试,我想通了。

    第二个参数“(NSManagedObject*)object”可以通过代理 (NSMutableSet *copiedSet) 进行操作,该代理由 KVC 调用“mutableSetValueForKey:”返回。

    代理上加载的任何操作都会神奇地/实际上反映在“(NSManagedObject*)object”的关系上(作为此 MO 的属性)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多