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