2014-02-21 3 views
0

핵심 데이터에서 "많은 관계"를 관리하는 방법에 대해서는 의문의 여지가 있습니다. 내 예에서 나는이 주 ID '구조체'를 가지고라는 또 다른 정체성 "많은 관계" 'Id_loc' 다음, 나는이 구조체의 정체성 인 JSON 파일에서이 객체 :iOS : 핵심 데이터 대 다수 관계

{"id":"s1", 
"n":"Name Struct", 
"id_loc":["l1","l2"]} //id_loc can contain many element 

이 개체를 구문 분석 할 때 id_loc 배열이 있습니다.

내부 구조체 클래스 I이 두 가지 방법 : 다음

- (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

NSSet을 CoreData에 실제로 저장할 수 없습니다. NSSet은 주요 객체와 관련된 다른 CoreData 엔티티 만 포함합니다.

데이터로 배열을 저장하려면 NSData 속성을 사용하고 NSString을 NSArray에 보관하려면 NSKeyedArchiver를 사용해야합니다.

그러나 가장 간단한 솔루션 일 수도 있지만 몇 가지 제한 사항이 있습니다. 예를 들어, 이러한 특성을 사용하거나 술어를 사용할 수 없습니다. 따라서 "위치"인 다른 엔티티를 만들고 "l1", "l2"값을 기반으로 위치 객체를 만드는 것이 좋습니다.

예 addLocObject를 사용합니다. 또는 여러 개를 추가하려는 경우 - (void) addLoc : (NSSet *) values; 그러나 이러한 객체를 만들어야합니다. 즉, 컨텍스트를 사용하여 핵심 데이터에 추가하고 기본 객체에 추가하는 것입니다.

아마도 ID가있는 경우 기존 위치를 선택하고 존재하지 않는 경우에만 ID를 만들 수도 있습니다.

+0

예, "Id_loc"이라는 Location에 대한 ID가 있습니다.이 엔티티가 있으면 구조에 array_loc 요소를 추가하는 방법은 무엇입니까? – CrazyDev

+0

루프를 사용하고 "addLocObject"를 수행합니까? – CrazyDev

+0

편집 내 대답 –