目前我正在坚持使用核心数据后端的nstreecontroller。我的问题是,如果我编辑字段或添加新行,则不会触发重新排列。
结构:
- 配置了准备内容ON并使用延迟抓取ON的NSTreeController。控制器绑定到appDelegate.managedObjectContext和appDelegate.mySortDescriptor(这是一个返回内部带有nssortdescriptor的数组的函数)。
- 将其列绑定到treecontroller.arrangedObjects.name的Outlineview。 Outlineview也处于SourceList模式。
- 一个名为“Item”的实体,它与Item具有一对多关系(子项),与Item具有一对一关系(父项)。当然还有一个名为“name”的字段,它包含displayvalue。
- 两个存储空间。一个只保留在内存中,默认一个。临时存储用于设置根实体(我不希望它们被存储,因为它们只是“可视化”)。
直到这里一切都很好,除了:
- 在启动时,sortdescriptor会被读入但不被执行(我自称为重新排列功能)
- 对核心数据没有任何修改会触发重新排列方法
我已经尝试通过以下结果自行解决问题:
- 删除“使用懒惰提取”将解决问题o_O但是谁想要这个?!
- 在outlineView中调用重新排列:setObjectValue:forTableColumn:byItem :( outlineview datasource)将解决问题。但是我真的不明白为什么这个被调用(我使用的是coredata,所以它不应该被调用?)。另一方面,调用重新排列通常会再次混淆排序(例如,如果你保存一个没有改变其值的单元格)
这就是为什么我告诉自己你要面对一个错误的事实:)
我真正想要的是以下内容:
- CoreData后端
- Outlineview始终排序(用户无法更改)
- 跳过根对象的保存
- 总是欢迎减少工作
非常感谢和最诚挚的问候,matthieu riolo
PS:提示也很受欢迎