2014-02-21 2 views
0

У меня есть сомнения, как управлять «многими отношениями» в основных данных. В моем примере я основное тождество «STRUCT», которые имеют «для многих отношениях» с другой идентичности под названием «Id_loc» Тогда, у меня есть этот объект в файл JSON, который является идентичность Struct:iOS: основные данные для многих отношений

{"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]; 

EDIT

Является ли это правильный ответ?

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

Вы действительно не можете сохранить NSSet в CoreData именно так. NSSet содержит только другие объекты CoreData, которые связаны с вашим основным объектом.

Чтобы сохранить массив с данными, вам необходимо использовать свойство NSData и использовать NSKeyedArchiver для архивации вашего NSArray с помощью NSStrings.

Однако даже это простейшее решение есть некоторые ограничения. Например, вы не сможете использовать и предикаты для этих свойств. Поэтому я бы рекомендовал создать другой объект, который является «Location», и создать объекты местоположения на основе значений «l1», «l2».

Да, вы используете addLocObject: или если вы хотите добавить несколько используемых вами - (void) значений addLoc: (NSSet *); Но вы должны создать эти объекты - создать их в основных данных с вашим контекстом и добавить его в основной объект.

Возможно, если у вас есть ID, вы также хотите выбрать первые существующие местоположения и создать их, только если они не существуют.

+0

Да, у меня есть идентификатор для местоположения под названием «Id_loc», и как добавить элемент array_loc в структуру, если у меня есть этот объект? – CrazyDev

+0

Я использую цикл и делаю «addLocObject»? – CrazyDev

+0

Отредактировал мой ответ –

Смежные вопросы