Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 核心数据:在NSTableView中对多个关系排序_Objective C_Cocoa_Sorting_Core Data_Nsarraycontroller - Fatal编程技术网

Objective c 核心数据:在NSTableView中对多个关系排序

Objective c 核心数据:在NSTableView中对多个关系排序,objective-c,cocoa,sorting,core-data,nsarraycontroller,Objective C,Cocoa,Sorting,Core Data,Nsarraycontroller,我无法使我的NSTableView保持对多关系的内容有序 我拥有的是一个实体“关系”,它与一个实体“卡”存在一对多关系,这两个实体“卡”都由NSArrayController管理。卡有两个属性,“数字”(int)和“名称”(String)通过绑定显示在NSTableView的两列中。我可以对表列进行永久性排序,但在每次插入卡片时,表视图的行都会随机重新排列(但是,删除卡片会保持行顺序) 我想要的是以下行为:用户可以对列进行排序,但当他插入卡片时,卡片应显示为表的最后一行(插入时不直接排序,但当然

我无法使我的NSTableView保持对多关系的内容有序

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

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

我知道一对多关系的内容是以集合的形式保存的,但我不知道如何从那里继续下去


非常感谢您的帮助。

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


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

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

随机化表示您正在将一个集合映射到数组的某个位置。(集合包含随机顺序的唯一对象。)

另一方面,将新添加的行按排序顺序放在表的末尾很难实现,而且UI设计也很糟糕

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

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


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

非常感谢您的回答!由于我是核心数据的初学者,我不确定您提到的逻辑部分属于哪里。您能否更具体地说明在何处缓存关系集以及如何将其再次添加到父对象关系?谢谢您的回答。在使用核心数据时,我将卡实体的NSArrayController绑定到类别实体的NSArrayController的内容集,形成了一个对多关系。无法绑定到ContentArray!因此,(我猜)NSTableView呈现的是一个集合。通过单击表格标题(列绑定到卡的属性),表格可以正确排序。但是,插入新卡后,行开始跳跃。(这与我是否希望将卡添加到表的末尾无关)