1

我的应用程序维护一些数据列表,用户可能会隐藏某些行。隐藏/显示按钮位于编辑面板中,可通过将tableview置于编辑模式,然后选择要编辑的行来进行访问。这意味着在编辑模式下,所有的行都需要显示出来,甚至是那些通常隐藏的行。否则将无法取消隐藏它们。从setEditing更改核心数据谓词

我通过将fetchedResultsController设置为nil来实现此目的,并在setEditing中重新加载表,然后修改构建fetchedResultsController谓词的代码,以检查表是否处于编辑模式,如果是,跳过谓词的一部分不包括隐藏的列表。因此,当用户触摸Edit按钮时,表格会随着所有行重新加载进入编辑模式,并且在返回时只重新加载未隐藏的行。

这工作正常,除了它已经杀死了进入和退出编辑模式时通常看到的动画。额外的重新加载使它看起来很陡。如果在调用[super setEditing:animated]之前或之后执行重新加载,则没有区别。

有没有更好的方法或地方来做到这一点?

回答

0

使您的CD对象包含可见性属性。当你进入编辑模式时,翻转所有隐藏单元格的属性。使fetchedResultsController的谓词包含可见性属性。如果您已实施回叫,它会自动添加表格单元格。

+0

这工作,谢谢!这并不是100%平滑,因为表格在进入编辑模式的同时进行更新,但我认为它可能是最好的。不过,仍然困惑为什么其他史蒂夫的建议没有奏效。 – janineanne

1

来源:http://developer.apple.com/library/ios/#documentation/CoreData/Reference/NSFetchedResultsController_Class/Reference/Reference.html

修改获取请求 你不能简单地改变读取请求修改结果。如果要更改提取请求,则必须执行以下操作:

  1. 如果您正在使用缓存,请将其删除(使用deleteCacheWithName :)。 通常,如果您要更改提取 请求,则不应使用缓存。
  2. 更改提取请求。
  3. 调用performFetch:

看看是否能更好地工作,对破坏控制器和重装表。

+0

该表不执行performFetch后更新,除非我使用重新加载,这是我试图避免。我还需要做些什么才能做到这一点? – janineanne