답변:
Core Data에는 "기본"배열 또는 사전 유형이 없습니다. 당신은 저장할 수 있습니다 NSArray
또는를 NSDictionary
변형 가능한 속성으로. 이것은을 사용합니다 NSCoding
에 배열 또는 사전을 직렬화 NSData
속성 (액세스에 직렬화 적절하게). 이 방법의 장점은 쉽다는 것입니다. 단점은 배열이나 사전에 쿼리 할 수 없으며 (데이터 저장소에 BLOB로 저장 됨) 컬렉션이 큰 경우 데이터 저장소간에 많은 데이터를 이동해야 할 수도 있습니다 (있는 경우) 컬렉션의 작은 부분을 읽거나 수정하기 위해 SQLite 데이터 저장소).
대안은 코어 데이터 대 다수 관계를 사용하여 배열 또는 사전 콜렉션의 시맨틱을 모델링하는 것입니다. 배열이 더 쉬우므로 시작하겠습니다. 핵심 데이터 대 다수 관계는 실제로 집합을 모델링하므로 배열과 같은 기능이 필요한 경우 집합을 정렬하거나 (가져온 속성을 사용하는 것이 편리한 방법 임) 엔터티에 추가 인덱스 특성을 추가해야합니다. 배열 항목을 저장하고 색인을 직접 관리합니다. 동종 배열을 저장하는 경우 (모든 항목이 동일한 유형 임) 배열 엔티티의 엔티티 설명을 쉽게 모델링 할 수 있습니다. 그렇지 않은 경우 변형 가능한 속성을 사용하여 항목 데이터를 저장하거나 항목 엔터티 제품군을 만들지 여부를 결정해야합니다.
사전을 모델링하려면 키와 값을 저장하는 일련의 엔티티와 다 대다 관계가 필요할 수 있습니다. 키와 값은 모두 위에서 설명한 배열의 항목 엔터티와 유사합니다. 따라서 네이티브 형식 (사전 미리 알고있는 경우), 변형 가능한 특성 또는 형식 별 엔터티 제품군의 인스턴스와의 관계 일 수 있습니다.
이 모든 것이 약간 어리석은 것처럼 들립니다. Core Data와 같은 스키마 종속 프레임 워크에 임의의 데이터를 구호하는 것은 어렵습니다.
주소와 같은 구조화 된 데이터의 경우 엔티티를 명시 적으로 모델링하는 데 시간을 소비하는 것이 거의 항상 쉽습니다 (예 : 주소의 각 부분에 대한 속성). 사전을 모델링하는 모든 추가 코드를 피하는 것 외에도, UI가 더 쉬워지고 (바인딩은 "그냥 작동합니다") 유효성 검사 논리 등이 Core Data로 처리 될 수 있기 때문에 훨씬 명확 해집니다.
최신 정보
OS X 10.7부터 Core Data에는 배열 대신 사용할 수있는 순서 집합 유형이 포함되어 있습니다. 10.7 이상을 대상으로 할 수있는 경우이 방법은 정렬 된 (배열 형) 컬렉션에 가장 적합한 솔루션입니다.
나는 비슷한 문제가 있었다. 제 경우에는 문자열 배열을 매핑하고 싶었습니다. 나는 Barry의 조언을 따르고 마침내 작동하게했습니다. 다음은 일부 코드의 모습입니다 (이 문제를 겪는 다른 사람들에게 희망을 분명히 할 것입니다) ...
내 엔티티는 다음과 같습니다.
@interface AppointmentSearchResponse : NSManagedObject
@property (nonatomic, retain) NSSet *messages;
@end
내 객체 모델 코드 관리 (코어 데이터) 코드는 다음과 같습니다.
NSEntityDescription *entityDescription = [[NSEntityDescription alloc] init];
[entityDescription setName:@"AppointmentSearchResponse"];
[entityDescription setManagedObjectClassName:@"AppointmentSearchResponse"];
NSMutableArray *appointmentSearchResponseProperties = [NSMutableArray array];
NSAttributeDescription *messageType = [[NSAttributeDescription alloc] init];
[messageType setName:@"messages"];
[messageType setAttributeType:NSTransformableAttributeType];
[appointmentSearchResponseProperties addObject:messageType];
[entityDescription setProperties:appointmentSearchResponseProperties];
여기 주요 항목은 다음과 같습니다.