2011-03-11 6 views
4

iOS 앱에 NSManagedObject가 있습니다. 이 객체를 라운드라고합니다. 라운드에서 나는 많은 Person 객체들과 많은 관계를 맺고있다.iOS : 핵심 데이터 : 관리 객체에 주문한 객체 세트를 유지하는 방법

xCode는 NSSet을 개인 관리 객체에 대한 일대 다 관계의 데이터 유형으로 사용하여 내 관리 객체 클래스를 생성합니다.

그래서 내 라운드 관리되는 개체는이 권리 같습니다

@interface Round : NSManagedObject 
{ 
} 

@property (nonatomic, retain) NSSet* people; 

@end 

그러나 NSSet이 순서 수집하지 않으며 나는 내가 지정 이러한 사람 개체를 유지하기 위해 사용 해요있는 NSArray의 순서를 유지하려면 내 라운드 관리 개체에.

NSSet을 NSArray로 변환하려고했지만 세트의 원래 순서는 유지되지 않습니다.

런타임시 다음 오류가 발생하여 라운드 관리 객체에서 NSSet에서 NSArray로 유형을 변경하려고했습니다.

2011-03-11 14:00:06.950 SkeetTracker[42782:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: **'Unacceptable type of value for to-many relationship: property = "people"; desired type = NSSet; given type = __NSArrayM;** value = (
    " (entity: Person; id: 0x5bed0c0 ; data: {\n firstName = Todd;\n lastName = McFarlane;\n round = \"0x5bf2cb0 \";\n scores = \"\";\n})", 

는 누구도 그런 일을 발견하고 해결책을 알고 했습니까?

친절 감사, 조지

답변

2

이 할 수있는 복잡한 물건의 종류, 내가 애플에서 그것을 만들 텐데. 그러나이 없기 때문에, 당신이 해결 방법을 사용합니다. 일반적으로 정의되지 않은 유형의 임시 속성을 사용하고 배열의 요소에 색인 속성을 추가합니다. 데이터가로드되면 인덱스로 정렬 된 객체를 사용하여 임시 속성 인 배열을 만듭니다. 컨텍스트가 저장되면 배열을 통해 각 개체의 인덱스가 올바른지 확인합니다. 또는 변경 사항이 거의없는 경우 배열을 변경할 때마다 색인을 변경할 수 있습니다.

0

훌륭한 아이디어입니다. 제 경우에는 제 배열의 요소에 "인덱스"속성을 추가 할 수 있으며 (또한 관리 대상이기도합니다) 인덱스를 임시 속성으로 만들 수 있다고 생각합니다.

여분의 임시 배열 속성을 생성해야하는 이유가 약간 명확하지 않습니다. 당신이 지속적 정렬 순서를 원하는 경우에 당신은 당신이에서 NSSortDescription을 만들 수 있습니다 저장된 속성이 필요에 관계없이 만 -

3

나는에서 iOS 5가 실제로 그것을 구축하고 있다고 생각합니다. 그런 다음 하나의 메서드를 더 추가합니다 (나는 도트 액세스 할 수 있도록 readonly 속성을 선호합니다) [NSSet sortedArrayUsingDescriptors:self.unsortedSetMethod] 배열을 반환합니다.

관련 문제