0

我很难让我的 NSTableView 保持一对多关系的内容有序。

我所拥有的是一个实体“关系”,它与一个由 NSArrayController 管理的实体“卡”有一对多关系。Card 有 2 个属性,“number”(int)和“name”(String)通过 Bindings 显示在 NSTableView 的两列中。我可以对表格列进行永久排序,但是在每次插入新卡片时,表格视图的行都会随机重新排列(但是,删除卡片会保持行顺序)。

我想要的是以下行为:用户可以对列进行排序,但是当他插入卡片时,卡片应该显示为表格的最后一行(插入时不直接排序,但当然不显示随机重新排列,任何一个)。只有当用户再次排序时,新卡也会被排序。

我知道一对多关系的内容是作为集合保存的,但我不知道如何从那里继续。

我很感激任何帮助。

4

2 回答 2

1

如果表的列绑定到 NSArrayController 则行的顺序不应该是随机的,因为数组具有固定的顺序。此外,数组控制器使用的 fetch 上应该有一个排序描述符,它将强制执行排序顺序。

随机化表明您将某个集合映射到数组上。(集合包含随机顺序的唯一对象。)

顺便说一句,将新添加的行乱序放在表的末尾很难实现,并且是糟糕的 UI 设计。

这很难实现,因为核心数据和绑定旨在轻松准确地以逻辑关系而不是 UI 中的任意可视位置显示数据。如果表的末尾对添加的Card对象没有逻辑意义,那么您将必须做很多工作才能使其显示在那里。

这是一个糟糕的 UI,因为当所有其他卡片以某种逻辑顺序出现时,用户不会理解为什么新添加的卡片会出现在表格的末尾。如果您有一张按名称按字母顺序排列的表格,用户将无法理解为什么一张名为“Foxtrot”的卡片会出现在表格末尾的“Zulu”之后。

相反,您应该在表格外部的 UI 元素中显示新卡片和/或将表格滚动到新卡片的正确排序位置。

于 2010-08-02T13:07:59.723 回答
0

本质上,您需要将关系集缓存在排序的 NSArray 中。

创建一个 NSArray,它是关系 NSSet 的一个版本[fooSet allObjects]。NSArray 有几种排序方法可以用来对内容进行排序。当用户添加新卡片时,将其添加到数组的末尾并添加到父对象关系中。

于 2010-08-02T12:44:14.217 回答