Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/105.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
带fetchedresultscontroller的ios UITableView-添加自定义行_Ios_Uitableview - Fatal编程技术网

带fetchedresultscontroller的ios UITableView-添加自定义行

带fetchedresultscontroller的ios UITableView-添加自定义行,ios,uitableview,Ios,Uitableview,我有一个UITableView,数据来自NSFetchedResultsController 这是我的桌面视图: 我需要添加一行“所有类型”。它还需要: 可与所有其他项目排序 可选择(现在已选择设计) 选择“所有类型”应取消选择其他行 给出一些信息,以了解选中时它是“所有类型”行 我读过,也读过。给定的方法不可能对数据进行排序,或者看起来非常粗糙,产生了大量难以维护的代码,因此不可能更改逻辑和维护代码 还有其他好的选择吗 注:我明白,我的问题听起来可能“宽泛”,不包含代码,但我认为这是一个非常

我有一个
UITableView
,数据来自
NSFetchedResultsController

这是我的桌面视图:

我需要添加一行“所有类型”。它还需要:

  • 可与所有其他项目排序
  • 可选择(现在已选择设计)
  • 选择“所有类型”应取消选择其他行
  • 给出一些信息,以了解选中时它是“所有类型”行
  • 我读过,也读过。给定的方法不可能对数据进行排序,或者看起来非常粗糙,产生了大量难以维护的代码,因此不可能更改逻辑和维护代码

    还有其他好的选择吗


    注:我明白,我的问题听起来可能“宽泛”,不包含代码,但我认为这是一个非常常见的问题。

    我认为这根本不是一个非常常见的问题。我可以看出,做您正在尝试的事情似乎很自然,但让我们分析一下您的情况:您通常有两个对象数组,您希望将它们排序为单个数组。现在这是一个相当普遍的情况,我相信每个人都知道如何解决这个问题。您需要创建单个对象数组,然后对其进行排序

    在我看来,您有3种选择:

    • 获取所有项目,合并2个数组,排序并呈现它们。这不是一个好主意,因为如果数据库中有很多项,内存消耗可能会有点太大
    • 将额外的数据放入数据库,并像平常一样使用fetchresult控制器。这应该可以很好地工作,但是您可能需要标记这些项目,以便以后删除它们,或者将其保留在数据库中,但在不希望显示它们的地方忽略它们
    • 创建一个临时数据库,结合需要从数据库中获取的内容和其他数据。如果您的数据在此列表中是只读的,那么这种方法非常好(在您发布的内容中似乎就是这种情况)。不过,最好在对象之间创建某种链接。例如,某种类型的ID会很好,这样当用户从第二个数据库中选择一个对象时,您只需读取ID并从原始数据库中获取对象

    我没有两个阵列。我只需要在TableView中添加一行,然后我就看不出问题出在哪里了。您只需使用委托方法添加一个额外的行。可以获取单元在加载时的位置,并偏移该位置之后的所有对象。或者,您可以通过将请求的单元格数据与自定义单元格数据进行比较来动态应用插入,如果请求的数据大于自定义单元格数据,则将其偏移。实际上,存在一个问题。我的tableView有一些自定义逻辑(例如,选择“所有类型”应取消选择其他行)。如果采用这种方法,我必须将委托设置为我的控制器,并使用该自定义逻辑实现didSelectRowForIndexPath。事实上,外部控制器不需要知道这个逻辑。如果我有3个这样的表(在不同的控制器中),会发生什么?我必须复制粘贴所有代码或进行一些奇怪的重构—您不需要多次编写此逻辑。表视图同时具有委托和数据源。因此,didSelectRowForIndexPath归委托所有,而单元格插入由数据源控制。这意味着您可以为多个代理使用相同的数据源,或者相反。顺便说一句,如果你的选择是非常定制的,你可能更愿意使用单元格中的按钮并编写自己的逻辑..我明白,你在说什么。事实上,我现在有一个数据源对象为所有表视图设定种子(当然,使用不同的数据)。但我需要在不同TableView的委托中执行不同的操作。所以我需要一个委托:)内部委托将处理选择,外部委托(每个单元格1个)将处理触摸并执行所需的操作。我认为这是一个复杂的结构,我正在寻找一种更简单的方法来解决它