Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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
Uitableview TableView,按正确顺序显示核心数据NSSet中的记录_Uitableview_Sorting_Core Data_Nsset - Fatal编程技术网

Uitableview TableView,按正确顺序显示核心数据NSSet中的记录

Uitableview TableView,按正确顺序显示核心数据NSSet中的记录,uitableview,sorting,core-data,nsset,Uitableview,Sorting,Core Data,Nsset,我已经研究了一段时间,我认为有很多解决方案,但我不确定它们是否有那么好。可能是我错过了什么:-) 我有两张桌子。对于表A中的每条记录,表B中有多条记录。即一对多关系。我已经在核心数据中对其进行了映射,并生成了类。到目前为止还不错 我的基于表视图的UI需要如下所示: Section 1 Cell 1: Table A: field1 Cell 2: Table A: field2 ----- Section 2 Cell 1: Table B: record 1: field1 Cell 2: T

我已经研究了一段时间,我认为有很多解决方案,但我不确定它们是否有那么好。可能是我错过了什么:-)

我有两张桌子。对于表A中的每条记录,表B中有多条记录。即一对多关系。我已经在核心数据中对其进行了映射,并生成了类。到目前为止还不错

我的基于表视图的UI需要如下所示:

Section 1
Cell 1: Table A: field1
Cell 2: Table A: field2
-----
Section 2
Cell 1: Table B: record 1: field1
Cell 2: Table B: record 2: field1
....
当我在我的
tableView:cellforrowatinexpath:
中时,处理第1节单元格很容易,因为它们与单个表A记录是不同的字段。第2节的单元格不同。每次调用
tableView:cellforrowatinexpath:
时,我都需要从表A的NSSet中获取正确的表B记录。这就是问题所在

指示它不向订单进货。这意味着如果我想要基于索引的特定记录,我有几种可能的技术:

  • 将排序描述符添加到核心数据查询中,并使用快速枚举获得所需的记录。我不知道这是否有效,因为我们仍在使用NSSet
  • 获取数据后,使用排序描述符对NSSet进行排序,以生成NSArray,并在启动表加载之前将其存储在属性中
  • 我现在考虑的第三个选项是为NSSet编写一个decorator,它的作用类似于NSArray,允许我指定一个排序字段并自动跟踪NSSet的更改。这很棘手,但从长远来看可能会有回报

这两个答案似乎都不太好。有更好的方法吗

最后,一个NSArray存储在控制器中,并将NSSet记录排序到其中。

如果您只需要对象,请使用NSSet访问器

如果要对对象进行排序,请设置NSFetchRequest并添加相应的NSSortDescriptor

然后,只需使用
executeFetchRequest:error:

更好的是,因为这是专门针对表视图的,所以使用NSFetchedResultsController填充表视图。这就是它的目的