我遇到麻烦让我的NSTableView保持订购多对多关系的内容。
我所拥有的是与NSArrayController管理的实体“Card”的多对多关系中的实体“关系”。 Card有2个属性,“number”(int)和“name”(String)通过NSTableView的两列中的Bindings显示。我可以永久地对表列进行排序,但是在卡的每个新插入中,表视图的行都会随机重新排列(但是,删除卡会保持行顺序)。
我想要的是以下行为:用户可以对列进行排序,但是当他插入卡片时,卡片应显示为表格的最后一行(不会在插入时直接排序,但当然不会显示随机重新安排,或)。只有当用户再次排序时,新卡才会被排序。
我知道多对多关系的内容会被保留为集合,但我不知道如何从那里开始。
我感谢任何帮助。
答案 0 :(得分:1)
如果表的列绑定到NSArrayController,那么行的顺序永远不应该是随机的,因为数组具有固定的顺序。此外,数组控制器使用的提取应该有一个排序描述符,它将强制执行排序顺序。
随机化表示您将某个集映射到数组的某个位置。 (集合以随机顺序包含唯一对象。)
顺便说一句,在表的末尾放置一个新添加的排序很难实现,并且UI设计很糟糕。
这很难实现,因为Core Data和绑定旨在轻松准确地显示数据,而不是UI中任意可视的位置。如果表的末尾没有添加Card
对象的逻辑含义,那么你将需要做很多工作才能使它显示在那里。
这是糟糕的用户界面,因为当所有其他卡以某种逻辑顺序出现时,用户将无法理解为什么新添加的卡会出现在表的末尾。如果您在名称上按字母顺序排序表,则用户将无法理解为什么名称为“Foxtrot”的卡片出现在“Zulu”之后的表格末尾。
相反,您应该在表格外部的UI元素中显示新卡片和/或将表格滚动到新卡片的正确排序位置。
答案 1 :(得分:0)
基本上,您需要在已排序的NSArray中缓存关系集。
创建一个NSArray,它是NSSet与[fooSet allObjects]
的关系的一个版本。 NSArray有几种排序方法可用于对内容进行排序。当用户添加新卡时,将其添加到数组的末尾并将其添加到父对象关系。