2

目前,我坚持使用作为核心数据后端的 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:提示也很受欢迎

4

0 回答 0