iOS:核心数据与很多关系

时间:2014-02-21 10:43:12

标签: ios json core-data nsarray

我怀疑如何管理核心数据中的“与众多关系”。 在我的例子中,我有一个主要标识'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];
    }

1 个答案:

答案 0 :(得分:0)

你不能像这样将NSSet真正保存到CoreData中。 NSSet仅包含与主对象相关的其他CoreData实体。

要保存包含数据的数组,您需要使用NSData属性并使用NSKeyedArchiver将NSArray归档为NSStrings。

然而,即使是最简单的解决方案也存在一些局限性。例如,您将无法在这些属性上使用和谓词。因此,我建议创建另一个“Location”实体,并根据那些“l1”,“l2”值创建一个位置对象。

是的,你使用addLocObject:或者如果你想添加多个你使用的 - (void)addLoc:(NSSet *)值;但是您必须创建这些对象 - 使用您的上下文在核心数据中创建它们,然后将其添加到主对象中。

如果您有身份证,您可能还需要选择第一个现有位置,并且只有在不存在时才创建它们。