2013-07-29 2 views
5

NSOrderedSets는 테이블에있는 개체의 순서를 저장합니다. NSOrderedSet 인 속성을 사용하여 NSManagedObject 하위 클래스 인스턴스에 액세스하면 순서대로 수행됩니다.NSOrderedSet의 순서를 사용하여 NSFetchedResultsController의 결과를 정렬하는 방법

그러나 NSFetchRequest를 만들 때 NSSortDescriptor를 사용하여 해당 순서에 액세스 할 수있는 방법이 없습니다.

원시 SQLite DB에서 나타나는 순서는 Z_FOK_<relationship name> 필드에 저장됩니다. 데이터를 사용할 수 있지만 핵심 데이터 API를 통해 표시되지 않는 것으로 보입니다.

NSOrderedSet에 지정된 순서대로 결과를 반환하는 SQLite DB와 함께 작동하는 NSSortDescriptor를 작성하는 방법을 아는 사람이 있습니까?


업데이트

관련 질문 : NSFetchedResultsController and NSOrderedSet relationships

답변

3

나는 그것이 가능하다고 생각하지 않습니다. "순서"는 하나의 엔티티 A에서 다른 엔티티 B으로의 일대 다 관계와 연관되어 있으며, 대상 엔티티 B의 특성이 아닙니다. 그러나 코어 데이터 가져 오기 요청의 정렬 설명자는 엔터티의 (영구적 인) 속성 만 사용할 수 있습니다.

+1

저도 그렇게 보입니다 ... NSFetchedResultsControllers가 주문을 활용할 수 있도록 NSSortDescriptor에 특별한 지원이 없다고 믿을 수 없었습니다. 그렇지 않으면 개발자는 여전히 NSOrderedSet의 목적을 모호하게하는 "sortOrder"속성을 추가하고 수동으로 관리해야합니다. –

+0

@CoreyFloyd : 'B 객체'의 순서가 완전히 다른 두 가지 순서 관계 'A1 <-->> B'와'A2 <-->> B '를 가질 수 있으므로 "순서가 지정된 관계에 따라 정렬 된 B 객체 가져 오기"는 어쨌든 모호하다. –

+0

정렬 설명자를 사용하여 NSFetchRequest를 만들어야합니다. 하지만 정렬 설명자를 사용하지 않고 (카테고리, 서브 클래스 등을 사용하여) 작성할 수있는 방법이 있다면 가져 오기 요청을 실행할 때 NSOrderedSet 순서가 기본값이됩니다. 거의 확실하게 정의되지 않은 동작이지만 가능성이 있습니다. –

0

나는 이것을 지금 당장 신속하게 시험해 보았고, 그것은 나를 위해 일하는 것처럼 보였다. 나는 그것이 겉으로는 무작위로 정렬 선 fetchRequest.sortDescriptors = [ NSSortDescriptor(key: "surveyAnswer", ascending: true) ]을 놓친하지만 라인이 추가로 예상대로 정렬

var sectionsExcludingEmpty: [SurveyAnswerSection] { 
    let fetchRequest: NSFetchRequest<SurveyAnswerSection> = NSFetchRequest.init(entityName: "SurveyAnswerSection") 
    fetchRequest.predicate = NSPredicate.init(format: "surveyAnswer == %@ AND hidden == FALSE", self) 
    fetchRequest.sortDescriptors = [ NSSortDescriptor(key: "surveyAnswer", ascending: true) ] 
    if let moc = self.managedObjectContext { 
     do { 
      let results = try moc.fetch(fetchRequest) 
      return results 
     } catch { 
      fatalError("Could not get sectionsExcludingEmpty: \(error)") 
     } 
    } else { 
     fatalError("Unable to get own managed object context") 
    } 
} 

.

내 경우 SurveyAnswerSection에는 SurveyAnswer와 1 대 주문이 많은 관계가 있습니다.

관련 문제