我怀疑如何管理核心数据中的“与众多关系”。 在我的例子中,我有一个主要标识'Struct'与另一个名为'Id_loc'的身份有“很多关系” 然后,我将此对象放在一个结构标识的JSON文件中:
{"id":"s1",
"n":"Name Struct",
"id_loc":["l1","l2"]} //id_loc can contain many element
当我解析这个对象时,我将id_loc作为一个数组。
在Struct类中我有两种方法:
- (void)addLocObject:(Id_loc *)value;
- (void)addLoc:(NSSet *)values;
然后我这样做来存储id_loc数组:
Struct *struct = [NSEntityDescription insertNewObjectForEntityForName:@"Struct" inManagedObjectContext:context];
NSArray *array_loc = [element objectForKey:@"id_loc"];
NSSet *set = [NSSet setWithArray:array_loc];
[struct addLoc:set];
这是正确的方法吗?
没有必要给它打电话吗?
Id_loc *loc = [NSEntityDescription insertNewObjectForEntityForName:@"Id_loc" inManagedObjectContext:context];
修改
这是正确答案吗?
Struct *struct = [NSEntityDescription insertNewObjectForEntityForName:@"Struct" inManagedObjectContext:context];
NSArray *array_loc = [element objectForKey:@"id_loc"];
for (id loc in array_loc){
Id_loc *loc = [NSEntityDescription insertNewObjectForEntityForName:@"Id_loc" inManagedObjectContext:context];
loc.ident = loc;
[struct addLocObject:loc];
}
答案 0 :(得分:0)
你不能像这样将NSSet真正保存到CoreData中。 NSSet仅包含与主对象相关的其他CoreData实体。
要保存包含数据的数组,您需要使用NSData属性并使用NSKeyedArchiver将NSArray归档为NSStrings。
然而,即使是最简单的解决方案也存在一些局限性。例如,您将无法在这些属性上使用和谓词。因此,我建议创建另一个“Location”实体,并根据那些“l1”,“l2”值创建一个位置对象。
是的,你使用addLocObject:或者如果你想添加多个你使用的 - (void)addLoc:(NSSet *)值;但是您必须创建这些对象 - 使用您的上下文在核心数据中创建它们,然后将其添加到主对象中。
如果您有身份证,您可能还需要选择第一个现有位置,并且只有在不存在时才创建它们。