【问题标题】:Duplicating (copying) a core data record and related records复制(复制)核心数据记录和相关记录
【发布时间】:2011-07-23 06:56:20
【问题描述】:

我正在编写一个应用程序,允许用户创建“问卷”,然后向其中添加问题。我正在使用核心数据来存储信息。我创建了一个问卷实体,并与问题实体具有“一对多”关系。我的问题是,如果想让用户复制(复制)整个调查问卷、问题以及所有这些,最好的方法是什么?

所以要清楚:

我有:

问卷记录 ---> 问题 1 记录 - 问题 2 记录 - 问题 3 记录

我希望用户能够复制这个并最终得到这个:

问卷记录 ---> 问题 1 记录 - 问题 2 记录 - 问题 3 记录

问卷(副本)记录--->问题1记录-问题2记录-问题3记录

【问题讨论】:

    标签: iphone ios ipad macos core-data


    【解决方案1】:

    你说你想复制整个问卷,所以假设你想要的实际上是这样的:

    问卷 ---> 问题 1 - 问题 2 - 问题 3

    问卷(复印件)--->问题1(复印件)-问题2(复印件)-问题3(复印件)

    那么你需要的是一个深拷贝。假设您在数据模型上正确设置了关系的所有权规则,您可以根据 this NSManagedObject category 编写一些内容。

    【讨论】:

    • 是的,这就是我要找的!谢谢!
    【解决方案2】:

    您只需插入一个新的托管对象,然后将其所有值设置为与原始对象相同的值。如果您为托管对象使用专门的子类,您甚至可以编写一个简单的辅助方法(示例假设托管对象名为 Questionnaire,请进行相应更改):

    -(Questionnaire*)copyQuestionnaire
    {
      NSManagedObjectContext* ctx = [self managedObjectContext];
      // Obviously use the correct entity name...
      Questionnaire* newCopy = [NSEntityDescription insertNewObjectForEntityForName:@"Questionnaire" inManagedObjectContext:ctx];
      // Now just copy your properties, for this example we'll assume
      // a simple relationship called 'questions'
      [newCopy setQuestions:[self questions]];
    
      // We return a retained copy since our method name starts
      // with 'copy'
      return [newCopy retain];
    }
    

    【讨论】:

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