核心数据插入与现有关系的新数据

我有核心数据的问题,我有一个表,看起来像这样

用户(关系)机架(与关系)RackItem

我应该如何使用User和现有的Rack对象中的现有项目对象将新对象插入rackItem

我尝试获取现有的对象

predicate = [NSPredicate predicateWithFormat:@"userID = %@ AND rack.rackID = %@", _userID, @"1"]; entityName = @"RackItem"; NSArray *result = [self fetchDataWithEntity:entityName predicate:predicate]; id object = [result last object]; 

然后在setRackItem部分创build一个新的EntityDescription,并使用这个函数将其保存到核心数据

 - (id)objectInManagedObjectContextForDictionary:(NSDictionary *)dictionary entity:(NSString *)entityName managedObject:(id)object insertKey:(NSArray *)keys relation:(BOOL)isRelation { // Recursive method for (id key in dictionary) { id value = [dictionary objectForKey:key]; NSString *camelCase = [key stringByReplacingCharactersInRange:NSMakeRange(0,1) withString:[[key substringToIndex:1] uppercaseString]]; if ([value isKindOfClass:[NSDictionary class]] && isRelation) { if ([keys containsObject:camelCase] && keys != nil) { id newObject = [NSEntityDescription insertNewObjectForEntityForName:camelCase inManagedObjectContext:_managedObjectContext]; value = [self objectInManagedObjectContextForDictionary:[dictionary objectForKey:key] entity:camelCase managedObject:newObject insertKey:keys relation:isRelation]; } else { SEL selector = NSSelectorFromString(key); id newObject = [object performSelector:selector]; value = [self objectInManagedObjectContextForDictionary:[dictionary objectForKey:key] entity:camelCase managedObject:newObject insertKey:keys relation:isRelation]; } } NSString *methodName = [NSString stringWithFormat:@"set%@:", camelCase]; SEL selector = NSSelectorFromString(methodName); [object performSelector:selector withObject:value]; } return object; } 

结果是好的,数据插入成功。 但是现有的对象被修改了。 我认为这是id object = [result lastObject]的问题; 需要保留。 任何人都可以帮助我?

一些更新后面的结果插入

插入前

  1|9|2|0|0||||248|52|||1||||||| 2|9|2|0|0||||||||||||||| 3|9|2|0|0||||||||||||||| 4|9|2|0|0||||||||||||||| 5|9|1|0|0|1|||||||||||||| sqlite> select *from zrackitem; 

插入后

  1|9|2|0|0||||248|52|||1||||||| 2|9|2|0|0||||||||||||||| 3|9|2|0|0||||||||||||||| 4|9|2|0|0||||||||||||||| 5|9|2|0|0||||||||||||||| 6|9|1|0|0|1|||||||||||||| sqlite> select *from zrackitem; 

这表明我每次插入现有的zrackvariables行都不见了。

这似乎有点令人困惑…首先,你应该有当然作为NeverBe说机架和RackItem之间的一对多关系

那么在我看来,你在这里有一个概念性的问题。 如果要插入与以前RackItem相同的Rack的新对象,只需取出Rack Object,然后将RackItem的机架属性设置为您刚取出的Rack,即可插入新的RackItem。

你真的应该保持简单,否则你会有很多Coredata不稳定的问题希望这会有所帮助