2010-03-20 4 views
1

내 문제를 해결할 방법을 찾지 못했지만 생각할 수있는 모든 해결책이 더러워졌습니다. retch하고 싶다.주문이 중요 할 때 coredata에 일대 다 관계를 저장하는 우아한 방법 찾기

많은 회원 개체를 가질 수있는 팀 개체로 구성된 일대 다 관계가 있습니다. Xcode를 사용하여 데이터 모델을 만들었을 때 멤버 객체를 저장하는 기본 NSSet이 주어졌습니다. 불행히도 Set은 정렬되지 않았으므로 Member 객체의 순서를 유지해야하며 사이에 빈 공간이 있는지 알아야합니다. 회원.

NSSet 대신 NSArray를 사용하여 멤버 객체간에 빈 자리를 표시하는 데 사용할 수있는 더미 멤버 객체를 데이터 저장소에 만들지 만 그 솔루션은 실제로 너무 많은 해킹 나에게. 이후로는 항상 모든 쿼리에서이 더미 멤버를 필터링해야합니다.

NSDictionary는 구성원 개체 참조와 해당 위치를 Object-Key 쌍 (주문과 결원을 처리)으로 저장할 수 있으므로 완벽 할 수 있지만 CoreData는 NSDictionary를 지원하지 않습니다.

누구나 비슷한 요구가 있었고 간단한 해결책을 고안 했습니까?

+0

[핵심 데이터는 이제 NSOrderedSet을 사용하여 일대 다 관계를 지원합니다.] (http://developer.apple.com/library/mac/releasenotes/DataManagement/RN-CoreData/index.html#//apple_ref/doc/ uid/TP40010637-CH1-DontLinkElementID_3) 자세한 정보는 간단한 Google에서 찾을 수 있습니다. 나는 더 이상 오해하지 않게 답변을 업데이트 해주기를 바란다. 나는 훌륭한 Rob [Rix] (https://twitter.com/rob_rix)에게 감사의 말을 전하기 위해 30 분을 보냈다. – Swizzlr

답변

4

순서 관계가 구현하기 쉽습니다.

AlphaEnity<-->>AlphaToBetaEntity<<-->BetaEntity 

AlphaToBetaEntity가 있습니다

Here's the code I did for one of NSManagedObject subclasses. (. 어떤 이유로, 오늘에 유래하는 서식 코드를 게시 할 수 없습니다)

을이 경우에는 내가 좋아하는 설정의 관계를 가지고 order 특성. AlphaToBetaEntity를 정렬 한 다음 필요한 경우 연결된 BetaEntity를 반환합니다. 예전 학교에서 포인터 정렬을하는 것과 같습니다.

매우 큰 세트에서는 빠르게 물집이 생기고 BetaEntity에서 속성을 읽을 때까지 오류가 발생하지 않아도됩니다.

+0

업데이트 만 : 드디어 솔루션을 구현할 수있었습니다.처음에는 위의 권장 사항을 고려할 것이라고 생각했지만 솔루션이 내 관계에 더 적합하다고 판명되었습니다. 중간 순서 객체가 내 데이터 모델의 컨텍스트에 맞기 때문에 생각만큼 끔찍하지 않은 것으로 밝혀졌습니다. 감사합니다! 나는 두 가지 해결책을 받아 들일 수 있었으면 좋겠다. –

3

주문한 코어 데이터 일대 다 관계가 없으면 기본 데이터베이스 디자인의 결과물입니다. 이것에 대한 이유와 잠재적 인 해결책은 this Cocoa mailing list thread에서 논의됩니다. 솔루션에는 관리 대상 개체에 인덱스 속성을 추가하거나 이러한 개체를 연결된 목록에 유지 관리하는 작업이 포함됩니다.

자신이 직접하고 싶지 않은 경우 Brian Webster는 주문형 복수 대 코어 데이터 관계 here을 구현했습니다.

마지막으로 핵심 데이터에서 벗어나려는 경우 Aaron Hillegass의 새로운 BNRPersistence framework은 정렬 관계를 지원합니다.

+0

분명히 내 googlefu는 약하다. 감사합니다. 또는 올바른 방향으로 나를 가리켜 라. Brian의 주문형 솔루션은 내가 필요한 바로 그 것처럼 보입니다. –

관련 문제