我有一个复杂的CoreData实体:MY_ENTITY
我从我的webService收到一个MY_ENTITY类型的对象。
在某些情况下,我需要使用收到的obj编辑我的本地CoreData obj(MY_ENTITY)。
所以:
我在CoreData中有OBJ_1
我从WebService收到OBJ_2。
我需要从OBJ_2更新OBJ_1。 我是否要设置所有字段,还是可以将OBJ_1 ObjectID分配给OBJ_2并保存上下文(相同的上下文)?
答案 0 :(得分:0)
由于它们是两个独立的实例,因此您需要将所需的内容从O2移动到O1。您可以使用诸如此类的例程来执行属性的move属性,假设两个对象属于同一个Entity类:
// use entity description to get entity attributes and use as keys to get value
// scan attributes
NSDictionary *attributes = [[sourceEntity entity] attributesByName];
for (NSString *attribute in attributes) {
id value = [sourceEntity objectForKey:attribute];
if (value == nil) {
continue;
}
NSAttributeType attributeType = [[attributes objectForKey:attribute] attributeType];
switch (attributeType) {
case NSStringAttributeType:
// value = [value stringValue];
break;
case NSInteger16AttributeType:
case NSInteger32AttributeType:
case NSInteger64AttributeType:
case NSBooleanAttributeType:
value = [NSNumber numberWithInteger:[value integerValue]];
break;
case NSFloatAttributeType:
case NSDecimalAttributeType:
value = [NSNumber numberWithDouble:[value doubleValue]];
break;
case NSDateAttributeType:
if (dateFormatter != nil)
value = [dateFormatter stringFromDate:value];
break;
default:
value = @"";
break;
}
[targetEntity setValue:value forKey:attribute];
}
请注意,这只是一个示例,如果您打算使用,则需要清理并添加错误处理。此外,如果您通过Web服务获取O2作为JSON或XML,那么您可以使用它来简单地将JSON有效负载推送到targetEntity。这假设您的有效负载attrs与您的实体attrs对齐。在这种情况下,您将使用块或等效项替换sourceEntity和JSON有效内容,例如:
NSArray *seedData = [NSJSONSerialization JSONObjectWithData:[NSData dataWithContentsOfFile:dataPath]
options:kNilOptions
error:&err];
[seedData enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
...
id value = [obj objectForKey:attribute];
...
}
答案 1 :(得分:0)
您从Web服务接收OBJ_2的格式是什么?
无论哪种方式,将OBJ_2分配给OBJ_1都不会起作用,因为您只会替换本地变量所指向的引用。
要同步您需要的服务器数据的本地CoreData实体,以修改现有权利的属性。根据您的数据模型和您接收OBJ_2的格式,有不同的方法来实现这一目标。