gpt4 book ai didi

core-data - 使用 Core Data/Bindings 建模用户可订购列表

转载 作者:行者123 更新时间:2023-12-03 08:23:33 28 4
gpt4 key购买 nike

我正在 OS X 上完成一个关于核心数据的学习项目。我在数据存储中有一个实体 (Foo),在 UI 中,我使用带有绑定(bind)的 NSArrayController 来放置一些(名称)字段Foo 对象到 NSTableView 中,用户可以在其中添加/删除/重命名(并可能重新排序)项目。

如您所知,Core Data 存储是无序的。但是,我想从用户的角度给它排序。例如。将新行添加到 TableView 会将新 Foo 修复到列表的末尾,等等。如果表允许重新排序,则该顺序将保持不变。

我假设我应该通过向 Foo 实体添加一些隐藏的(即用户永远不会遇到它)“序号”字段来完成此操作,这很好。我想弄清楚:

  1. 为新项目设置“序号”字段的正确位置在哪里?现在,一个按钮正在调用数组 Controller 上的 add: 操作,绑定(bind)会神奇地处理所有其余部分。 (我需要访问项目计数才能正确设置它。)
  2. 在删除或重新排序时修复整个结果集序号的正确位置在哪里?
  3. 假设商店中的所有对象都有一个合理的序数属性,我必须对 UI 连接做些什么才能使 TableView 显示按该序数排序的结果?这是我可以纯粹用绑定(bind)做的事情吗?我需要子类化……什么吗?

感觉这是一个很常见的场景,这里的人可能已经有了现成的答案。我是核心数据和绑定(bind)的新手——试图摸索。不需要代码;指向正确方向的指针会很棒。谢谢。

最佳答案

进行排序的最简单方法是确保您的实体紧密模拟用户实际需要的数据。请记住,Core Data 不是数据库系统。它是一个具有持久性选项的对象图管理系统。对象具有行为。这意味着您可以将比通常仅用于数据库的信息更多的信息放入 Core Data。

大部分时间,良好的实体设计自然而然地产生了顺序。例如,用户需要按照将 Foo 对象添加到图形中的时间对其进行排序。因此,Foo 对象需要一个 creationDate 属性。只需在 creationDate 属性上绑定(bind)一个排序描述符即可。

最大的挑战是与建模数据无关的任意排序。我喜欢用与实际排序实体相关的轻量级 Order 实体来解决这个问题。

Foo{
name:string
creationDate:date
order<-->Order.foo
}

Order{
foo<-->Foo.order
previous<-->Order.next
next<-->Order.previous
}

如您所见,Order 实体的功能类似于老式链表。要在订单中插入一个新的 Foo 对象,只需在现有的 Order 对象之间插入一个新的相关 Order 对象。要创建有序列表,只需从 Order 对象开始,其 previous 属性为 nil,然后遍历 next 关系,拉取每个 foo 传递关系。

还有其他变体。

但同样,实体设计总是最好的。实体旨在模拟/模拟真实世界的对象、事件或条件。如果您考虑要模拟的真实世界事物,然后将其包含在实体和对象图设计中,那么您的排序通常会自然发生。

关于core-data - 使用 Core Data/Bindings 建模用户可订购列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5546282/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com