2013-07-29 21 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

私はそれが可能だとは思いません。 「順序付け」は、1つのエンティティAから別のエンティティBへの多対多関係に関連付けられており、ターゲットエンティティBのプロパティではありません。 しかし、Core Dataフェッチ要求のソート記述子は、エンティティの(永続的な)プロパティのみを使用できます。

+1

これも私の見ているようです... NSFetchedResultsControllersがその注文を利用できるように、NSSortDescriptorには特別なサポートがないとは思えませんでした。さもなければ、開発者はNSOrderedSetの目的をある程度排除する "sortOrder"プロパティを追加し、手動で管理する必要があります。 –

+0

@CoreyFloyd: 'B 012'オブジェクトの順序が完全に異なるので、' A1 <-->> B'と 'A2 <-->> B'という2つの順序関係を持つことができるので、"順序付けられた関係に従ってソートされた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対多数の関係を持っています。

関連する問題