2011-03-25 120 views
1

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

所以要明确:

我:

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

和我想要的用户能够复制这个并以此结束:

问卷记录---> Quest离子1个纪录 - 问题2纪录 - 第3题记录

问卷(复印)记录--->问题1纪录 - 问题2纪录 - 第3题记录

回答

1

你说你要复制一个完整的调查问卷,所以假设你想要的其实是这样的:

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

问卷(复印)--->问题1(副本) - 问题2(复制) - 问题3(复制)

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

+0

是的,这就是我一直在寻找的!谢谢! – Vic320 2011-03-26 15:04:46

+0

没有问题。不要忘记接受答案:) – 2011-03-26 16:03:47

1

您只需插入一个新的管理对象,然后将所有它的值与原始对象相同。如果您使用的是你的管理对象专门的子类,你甚至可以写一个简单的辅助方法(例如假设名为问卷管理对象,相应地更改):

-(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]; 
}