【问题标题】:NSTableColumn sorting with Core Data dictionaryNSTableColumn 使用 Core Data 字典排序
【发布时间】:2020-01-06 23:51:58
【问题描述】:

型号

extension MyEntity {

    @nonobjc public class func fetchRequest() -> NSFetchRequest< MyEntity > {
        return NSFetchRequest< MyEntity >(entityName: "MyEntity")
    }

    @NSManaged public var customFields: NSDictionary?
}

customFields 的键和值是字符串。

绑定

列是在代码中创建的,因为用户可以添加/删除列。

column.bind(NSBindingName.value, to: treeController!, withKeyPath: "arrangedObjects.customFields.\(uniqueID))", options: [.createsSortDescriptor:false])
column.sortDescriptorPrototype = NSSortDescriptor(key: "customFields.\(uniqueID))", ascending: true, selector: #selector(NSString.compare(_:)))

问题

单击列标题时排序将不起作用。值只是字符串,但似乎它们不被视为这样。 知道问题可能出在哪里吗? 谢谢!

更新

  • NSTreeController 处于实体模式
  • 这是一个基于视图的大纲视图(现在还使用基于单元格的视图吗??)
  • 对于静态列(在 IB 中定义),排序有效
  • 当我对动态列进行排序时,没有任何反应(没有错误)
  • 我认为这些值不被视为字符串,因为它是一个不使用泛型的 NSDictionary

更新 2

在另一个项目中,我成功地做到了。 唯一的区别是字典不是 ,而是MyObject 有一个value 类型为String 的属性。 使用以下代码启用排序:

/* Bind column for sorting */
column.bind(NSBindingName.value, to: resultsArrayController!, withKeyPath: "arrangedObjects.dictionary.\(String(describing: paramDef.objectID)).value", options: nil)

或者这也可以:

column.sortDescriptorPrototype = NSSortDescriptor(key: "dictionary.\(String(describing: paramDef.objectID)).value", ascending: true, selector: #selector(NSString.compare(_:)))

我不知道为什么它在这种情况下有效,而不是在上面。

【问题讨论】:

  • 这能回答你的问题吗? Sorting NSTableColumn contents
  • 树控制器是否处于完整模式?这是基于单元格的大纲视图还是基于视图的大纲视图?如果让值绑定创建排序描述符会发生什么?为什么您认为这些值不被视为字符串? “排序不起作用”与“什么都没有发生”是一样的,还是出现错误或异常?
  • @ElTomato,谢谢,但不,它不能回答我的问题。我使用 NSTreeController 的绑定
  • @Willeke,我用额外的信息更新了问题。
  • 您的目标是什么?你如何使用字典进行排序,是什么让一本字典排在另一本之前并不明显,所以你需要定义它。这看起来真的很复杂,也许你可以对你的实体进行非规范化,并在你的实体上有一个属性,它是你想要排序的字典中任何键和/或值的副本,而不是对这个新属性进行排序

标签: swift core-data nsdictionary nstablecolumn


【解决方案1】:

好吧,这很愚蠢。一个典型的 KVO 错字:

key: "customFields.\(uniqueID))" 应该: key: "customFields.\(uniqueID)"

有一个额外的括号。我觉得我好笨... 现在完美运行...

【讨论】:

    猜你喜欢
    • 2013-04-18
    • 1970-01-01
    • 1970-01-01
    • 2011-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-07
    • 1970-01-01
    相关资源
    最近更新 更多