6

NSOrderedSets は、テーブル内のオブジェクトの順序を保存します。NSOrderedSet であるプロパティを使用して NSManagedObject サブクラス インスタンスにアクセスすると、順序が正しくなります。

ただし、NSFetchRequest を作成するときに NSSortDescriptor を使用してその注文にアクセスする方法はないようです。

生の SQLite DB から、その順序は という名前のフィールドに格納されているようですZ_FOK_<relationship name>。データは利用可能ですが、コア データ API からは見えないようです。

NSOrderedSet で指定された順序で結果を返すために SQLite DB で動作する NSSortDescriptor を記述する方法を知っている人はいますか?


アップデート

関連する質問: NSFetchedResultsController と NSOrderedSet の関係

4

2 に答える 2

-1

私はこれを迅速に試しましたが、うまくいくようです。

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")
    }
}

行を逃したとき、fetchRequest.sortDescriptors = [ NSSortDescriptor(key: "surveyAnswer", ascending: true) ]一見ランダムに並べられていましたが、行を追加すると、期待どおりに並べ替えられました。

私の場合、SurveyAnswerSection には、SurveyAnswer との一対多の関係があります。

于 2016-10-27T13:05:57.293 に答える