NSManagedObject实例的值copy

从官网的文档我们知道,实例化NSManagedObject不能像一般的nsobject一样[[NSManagedObjectalloc] init],这样运行时会出错,正确的方法是:<style type="text/css"> p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #008423} </style>

[NSEntityDescription insertNewObjectForEntityForName:entity inManagedObjectContext:[db managedObjectContext]] 或

[[NSManagedObject alloc]initWithEntity:entityinManagedObjectContext:[db managedObjectContext]]

返回的实例。


如果我们想把一个实列的值copy到另一个实例,如何做呢,我们可以根据属性,一个一个copy,但是代码不灵活,如果我们改了数据库字段,那么代码又要改,我发现了一个通用的代码。

- (NSManagedObject*)copyObject:(NSManagedObject*)object toContext:(NSManagedObjectContext*)moc parent:(NSString*)parentEntity; { NSString *entityName = [[object entity] name]; NSManagedObject *newObject = [NSEntityDescription insertNewObjectForEntityForName:entityName inManagedObjectContext:moc]; [[self lookup] setObject:newObject forKey:[object objectID]]; NSArray *attKeys = [[[object entity] attributesByName] allKeys]; NSDictionary *attributes = [object dictionaryWithValuesForKeys:attKeys]; [newObject setValuesForKeysWithDictionary:attributes]; id oldDestObject = nil; id temp = nil; NSDictionary *relationships = [[object entity] relationshipsByName]; for (NSString *key in [relationships allKeys]) { NSRelationshipDescription *desc = [relationships valueForKey:key]; NSString *destEntityName = [[desc destinationEntity] name]; if ([destEntityName isEqualToString:parentEntity]) continue; if ([desc isToMany]) { NSMutableSet *newDestSet = [NSMutableSet set]; for (oldDestObject in [object valueForKey:key]) { temp = [[self lookup] objectForKey:[oldDestObject objectID]]; if (!temp) { temp = [self copyObject:oldDestObject toContext:moc parent:entityName]; } [newDestSet addObject:temp]; } [newObject setValue:newDestSet forKey:key]; } else { oldDestObject = [object valueForKey:key]; if (!oldDestObject) continue; temp = [[self lookup] objectForKey:[oldDestObject objectID]]; if (!temp && ![destEntityName isEqualToString:parentEntity]) { temp = [self copyObject:oldDestObject toContext:moc parent:entityName]; } [newObject setValue:temp forKey:key]; } } return newObject; }源码来自:http://pastebin.com/efkji4sy

ebook:http://pragprog.com/book/mzcd/core-data

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值