6

NSOrderedSets 保存表中对象的顺序。如果您使用 NSOrderedSet 属性访问 NSManagedObject 子类实例,那么它们将按顺序排列。

但是,在创建 NSFetchRequest 时,似乎无法使用 NSSortDescriptor 访问该订单。

从原始 SQLite DB 中可以看出,该订单存储在名为Z_FOK_<relationship name>. 数据可用,但通过核心数据 API 似乎不可见。

有谁知道编写 NSSortDescriptor 的方法,该方法将与 SQLite DB 一起使用,以按 NSOrderedSet 指定的顺序返回结果?


更新

相关问题:NSFetchedResultsController 和 NSOrderedSet 关系

4

2 回答 2

3

我不认为这是可能的。A“排序”与从一个实体到另一个实体的一对多关系相关联B,它不是目标实体的属性B。但是核心数据获取请求的排序描述符只能使用实体的(持久)属性。

于 2013-07-29T19:10:57.920 回答
-1

我刚才在swift中尝试过这个,它似乎对我有用。

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 回答