2009-07-04 9 views
7

아이폰 SDK의 코어 데이터를 사용하기 시작했습니다. 정렬 된 목록을 배열과 같이 저장하려고합니다. 그러나 핵심 데이터의 관계는 검색시 집합으로 표현됩니다. 이로 인해 오브젝트가 배치 된 순서를 저장하기가 어려워집니다.코어 데이터의 인덱싱 된 관계

좋은 예는 항목을 다시 정렬 할 수있는 경우 테이블보기의 데이터 항목입니다. 쉬운 해결책은 관리 대상에 인덱스 속성을 포함시키는 것입니다.

다음과 같은 계층 구조를 고려하십시오

문서를 < - 많은 - 투 - 많은 ->있는 DataItem

다른 문서 인스턴스가 동일한있는 DataItem에 연결할 수 있으며, 각 문서가 하나 이상있는 DataItem을 참조 할 수 (들) . 따라서 DataItem에서 인덱스 속성을 사용하면 해당 인스턴스의 재사용 가능성이 낮아집니다. 즉, Document 인스턴스 하나에 대한 인덱스 만 저장할 수 있습니다.

계층 구조를 테이블보기로 깔끔하게 표시 할 수 있지만 각 DataItem 인스턴스를 계속 재사용 할 수있는 방법에 대한 아이디어는 무엇입니까? 감사!

답변

3

좋은 해결책은 Document에서 별도의 데이터 구조를 유지하여 DataItem을 테이블보기의 위치에 매핑하는 것입니다. 동일한 DataItem을 여러 위치에 둘 수있는 것 외에도 DataItem을 여러 Documents에 추가해야하는 경우이 솔루션도 사용할 수 있습니다.

위로 돌아 가기 코어 데이터 객체를 보관하는 다양한 전략을 살펴본 결과 blog post이 예제 코드를 포함하여 매우 자세하게 설명하는 방법을 찾았습니다.

7

이 같은 다른 엔티티와 함께 ​​할 수 있습니다 : alt text http://gallery.me.com/davedelong/100084/Screenshot-20on-202009-07-04-20at-2010-34-56-20AM/web.jpg?ver=12467253090001

문서를 다음과 같이 뭔가를 사용하여 실제 dataItems를 찾을 수 :

NSSet * documentDataItems = [[document orderedDataItems] valueForKey:@"dataItem"]; 

마찬가지로,있는 DataItem은 모든 문서를 찾을 수

NSSet * dataItemDocuments = [[dataItem orderedPositions] valueForKey:@"document"]; 
+0

사진이 손상된 것 같습니다. –

+0

@BJ Homer - 감사합니다. 분명히 twitpic은 정적 연결을 좋아하지 않습니다. 대신 MobileMe에 업로드했습니다. –

15

OS X Lion (10.7)부터는 이제 훨씬 간단합니다. Cocoa는 Core Data와 호환되는 새로운 NSOrderedSet 클래스를 지원합니다. 이 기능은 iOS 5.0 이상이 필요하지만 iOS에서도 사용할 수 있습니다. 즉, 앱을 이전 버전의 iOS 또는 OS X와 ​​이전 버전과의 호환을 원할 경우 사용할 수 없습니다.

주문을 받으려면 Core Data Model Editor를 열고 a to를 선택하십시오. - 많은 관계와 "주문한"체크 박스를 확인하십시오.

+0

이 새로운 API에 대한 문서는 알고 계십니까? 나는 공식적으로 릴리스 노트에서 논의 된 것을 보았습니다. 예를 들어, 테이블 뷰에이 순서로 레코드를 표시하는 방법에 대해 알고 싶습니다. – Dov

+0

NSOrderSet의 클래스 참조에 대한 원래 대답의 링크가 있습니다. 그러나 테이블 뷰 내에서 최상의 사용 사례와 관련된 사항에 대해서는 잘 모릅니다. –

+1

NSOrderedSet은 현재 iCloud와 함께 사용할 수 없습니다. –