CoreData - 重复现有对象 [英] CoreData - Duplicate existing object

查看:94
本文介绍了CoreData - 重复现有对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

你好想从我的核心数据db复制一个对象。现在我正在使用

  movement2 = [NSEntityDescription 
insertNewObjectForEntityForName:@Movement
inManagedObjectContext: self.managedObjectContext];

movement2.name = movement.name;
movement2.value = movement.value;
movement2.date = movement.date;
...

它的工作原理。但是...



有没有办法将运动的所有值复制到

解决方案

NSManagedObject与NSObject不同,提供了一个API来迭代超过其属性和关系。或者说,它是实体描述。它不是一个单行的。

  movement2 = [NSEntityDescription insertNewObjectForEntityForName:@Movement
inManagedObjectContext :self.managedObjectContext];
NSEntityDescription * entity = [运动实体];
for(NSString * propertyName in [entity propertiesByName]){
[movement2 setValue:[movement valueForKey:propertyName] forKey:propertyName];
}

请参阅文档,了解更多详情。



这将足以克隆大多数对象。如果数据库结构正确,那么以这种方式复制关系,它们的反向关系也将被更新。所以,如果你的运动与运动方向有一个关系,并且运动方向有一个反向的一对多关系 parentMovements ,这个 parentMovements set将同时具有运动 movement2


Hi would like to duplicate an object from my core data db. Right now I'm using

        movement2 = [NSEntityDescription
                                     insertNewObjectForEntityForName:@"Movement" 
                                     inManagedObjectContext:self.managedObjectContext];

        movement2.name = movement.name;
        movement2.value = movement.value;
        movement2.date = movement.date;
        ... 

and it works. but...

Is there any way to copy all the values of movement to movement2, in one line of code?

解决方案

NSManagedObject, unlike NSObject, provides an API to iterate over its attributes and relationships. Or, rather, it's entity description does. It isn't a one-liner, though.

movement2 = [NSEntityDescription insertNewObjectForEntityForName:@"Movement" 
                                          inManagedObjectContext:self.managedObjectContext];
NSEntityDescription *entity = [movement entity];
for (NSString *propertyName in [entity propertiesByName]) {
    [movement2 setValue:[movement valueForKey:propertyName] forKey:propertyName];
}

See the documentation for more details.

This will be enough to clone most of the objects. If database structure is correct, then copying relationships this way, their inverse ones will be updated as well. So, if your Movement had a relationship with, say, MovementDirection, and MovementDirection has an inverse 1-to-many relation parentMovements, this parentMovements set will have both movement and movement2 inside after you call the code above.

这篇关于CoreData - 重复现有对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆