모범 사례? - 핵심 데이터 엔티티 속성으로서의 어레이/사전
저는 코어 데이터가 처음입니다.수집 유형은 속성 유형으로 사용할 수 없으며 배열/사전 유형 데이터를 속성으로 저장하는 가장 효율적인 방법이 무엇인지 알고 싶습니다(예: 거리, 도시 등의 주소를 구성하는 요소).별도의 엔티티가 필요하지 않으며 별도의 속성/필드보다 사전/어레이로 더 편리하게 저장됩니다.감사해요.
코어 데이터에 "원본" 배열 또는 사전 유형이 없습니다.저장할 수 있습니다.NSArray
또는NSDictionary
변환 가능한 속성으로.이것은 다음을 사용할 것입니다.NSCoding
배열 또는 사전을 에 직렬화합니다.NSData
속성(및 액세스 시 적절하게 역직렬화).이 접근 방식의 장점은 쉽다는 것입니다.단점은 어레이 또는 사전에 쿼리할 수 없고(데이터 저장소에 BLOB로 저장됨) 컬렉션이 크면 컬렉션의 일부를 읽거나 수정하기 위해 데이터 저장소(SQLite 데이터 저장소인 경우)로 많은 데이터를 이동해야 할 수 있습니다.
대안은 핵심 데이터 대 다 관계를 사용하여 배열 또는 사전 컬렉션의 의미론을 모델링하는 것입니다.어레이가 더 쉬우므로 먼저 이 문제부터 살펴보겠습니다.핵심 데이터-다중 관계는 실제로 집합을 모델링하므로, 어레이와 유사한 기능이 필요한 경우 집합을 정렬하거나(Fetched 속성을 사용하는 것이 편리한 방법임) 배열 항목을 저장하고 인덱스를 직접 관리하는 엔티티에 인덱스 속성을 추가해야 합니다.동종 어레이(모든 항목이 동일한 유형)를 저장하는 경우 어레이 엔티티에 대한 도면요소 설명을 모델링하기가 쉽습니다.그렇지 않은 경우 변환 가능한 특성을 사용하여 항목 데이터를 저장할지 아니면 항목 엔티티 패밀리를 생성할지 결정해야 합니다.
사전을 모델링하려면 키와 값을 저장하는 엔티티 집합에 대한 대다수 관계가 필요할 수 있습니다.키와 값은 모두 위에서 설명한 배열의 항목 엔티티와 유사합니다.따라서 이러한 유형은 네이티브 유형(사전에 알고 있는 경우), 변환 가능한 속성 또는 유형별 엔티티 패밀리의 인스턴스에 대한 관계일 수 있습니다.
만약 이 모든 것이 조금 위압적으로 들린다면, 그렇습니다.임의의 데이터를 코어 데이터와 같은 스키마 의존적 프레임워크로 호닝하는 것은 어렵습니다.
주소와 같은 구조화된 데이터의 경우 엔티티를 명시적으로 모델링하는 데 시간을 보내는 것이 거의 항상 더 쉽습니다(예: 주소의 각 부분에 대한 속성).사전을 모델링하기 위한 추가 코드를 모두 피할 수 있을 뿐만 아니라, 대부분의 코드를 코어 데이터에서 처리할 수 있기 때문에 UI(바인딩이 "그냥 작동"함)가 더 쉽고 검증 로직 등이 훨씬 명확해집니다.
갱신하다
OS X 10.7에서 코어 데이터에는 배열 대신 사용할 수 있는 순서 집합 유형이 포함되어 있습니다.10.7 이상을 대상으로 할 수 있는 경우 이 솔루션이 정렬된(어레이와 유사한) 컬렉션에 가장 적합합니다.
저도 비슷한 문제가 있었습니다.제 경우에는 문자열 배열을 매핑하고 싶었습니다.저는 배리의 충고를 따랐고 마침내 그것을 작동시켰습니다.코드의 일부는 다음과 같습니다(이것에 부딪히는 다른 사람들을 위해 상황을 명확하게 해줄 것으로 기대합니다.
내 엔티티는 다음과 같습니다.
@interface AppointmentSearchResponse : NSManagedObject
@property (nonatomic, retain) NSSet *messages;
@end
Manage Object Model Code(Core Data) 코드는 다음과 같습니다.
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];
여기서 핵심 항목은 다음과 같습니다.
- 속성 유형에 NSSet을 사용하고 있습니다.
- NST 변환 가능 특성을 사용하고 있습니다.핵심 데이터 관리 개체 모델에서 특성 유형으로 입력합니다.
언급URL : https://stackoverflow.com/questions/1562676/best-practice-array-dictionary-as-a-core-data-entity-attribute
'code' 카테고리의 다른 글
"npm install"을 실행하면 "ERR! code EINTENTITY"(npm 5.3.0)로 반환됩니다. (0) | 2023.05.23 |
---|---|
Express에 등록된 모든 경로를 가져오는 방법은 무엇입니까? (0) | 2023.05.23 |
tee에 대한 파이프 명령 출력 및 종료 명령 코드 저장 (0) | 2023.05.23 |
[routerLink]와 routerLink의 차이점 (0) | 2023.05.23 |
MongoDB에서 OneOverfindOneAndUpdate를 통한 업데이트 사용 사례 (0) | 2023.05.23 |