2010-06-25 6 views
2

다음과 같은 NSManagedObject 하위 클래스가 하나 있는데, NSManagedObjectContext에 의해 일부 인스턴스가 저장되었습니다 ( ).CoreData : NSManagedObject를 기본 키로 정렬하는 방법은 무엇입니까?

 
@interface SomeModelObject : NSManagedObject 
    @property (nonatomic, retain) NSString * text; 
@end 

이제 기본 키 (자동 생성)별로 정렬 된 목록을 가져 오려고합니다. NSFetchRequest를 시도하고 런타임 오류가 발생했습니다 : "keypath id가 엔티티에 없습니다".

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
NSEntityDescription *entity = [NSEntityDescription entityForName:@"SomeModelObject" inManagedObjectContext:self.managedObjectContext]; 
[fetchRequest setEntity:entity]; 

NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey:@"id" ascending:YES]; 
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sort, nil]; 
[fetchRequest setSortDescriptors:sortDescriptors]; 

기본 키별로 정렬 할 수 있습니까? 또는 정렬을 위해 Model 클래스에 일부 열을 추가해야합니까?

답변

6

기본 키가 값이 제어에서 완전히 벗어나는 임의의 구현 세부 사항 (시간에 따라 상수가 아닐 수도 있음)을 포함하는 은폐 데이터 형식이므로이를 기준으로 정렬하려는 것이 좋지 않은 것처럼 보입니다.

안정된 결정된 주문을 찾고 있다면 다른 속성으로 기존 또는 새 것으로 정렬하십시오.

일반적으로 관계형 데이터베이스 용어로 코어 데이터를 생각하지 않는 것이 가장 좋습니다. 객체 그래프와 객체 모델링 측면에 중점을 둡니다. 즉 API가 집중되어 있습니다.

+0

대단히 감사합니다! 정렬을 위해 일부 열을 추가하겠습니다. 예, 코어 데이터가 RDB가 아닌 개체 그래프를 처리합니다. 그러나 어떤 방법으로 NSSortDescriptor없이 데이터를 가져올 수 있다고 생각합니다. 삽입 된 순서로 가져 오려고합니다. 모든 모델 객체가 정렬 열을 가져야한다는 점이 조금 불편합니다. 그렇게 생각하지 않습니까? – taichino

+2

순수한 RDB에서는 동일한 작업을 수행해야합니다 (예 : sqlite에 ROWID가 있지만 데이터베이스가 폐기 될 때 변경됩니다) ... "삽입 순서"의 개념은 귀하의 특정 비즈니스 사례 및 따라서, 대부분의 기업이 필요가 없다는 점을 감안할 때 "무료"로 제공되어야하는 것은 아닙니다. – bbum

+0

음 ... 당신 말이 맞아요, 저의 구체적인 경우입니다. 수년 동안 데이터베이스 작업을 해왔으므로 지금 CoreData를 사용하는 데 어색함을 느낍니다 ... 어쨌든 계속 시도해 보겠습니다. 다시 한 번 감사드립니다! – taichino

관련 문제