从 setEditing 更改核心数据谓词

Posted

技术标签:

【中文标题】从 setEditing 更改核心数据谓词【英文标题】:Changing core data predicate from setEditing 【发布时间】:2011-08-12 00:33:31 【问题描述】:

我的应用维护了一个数据列表,其中一些行可能被用户隐藏。隐藏/显示按钮位于编辑面板中,通过将 tableview 置于编辑模式然后选择要编辑的行来访问该面板。这意味着在编辑模式下,所有行都需要显示,即使是那些通常隐藏的行;否则将无法取消隐藏它们。

我通过将 fetchedResultsController 设置为 nil 并在 setEditing 中重新加载表来实现这一点,然后修改为 fetchedResultsController 构建谓词的代码,以检查表是否处于编辑模式,如果是,则跳过谓词中排除隐藏列表。因此,当用户触摸“编辑”按钮时,表格会在进入编辑模式时重新加载所有行,并在退出时重新加载只有未隐藏的行。

这很好用,只是它杀死了人们在进入和退出编辑模式时通常看到的动画。额外的重新加载使它看起来很突然。如果我在调用 [super setEditing:animated] 之前或之后进行重新加载没有区别。

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

【问题讨论】:

【参考方案1】:

发件人:http://developer.apple.com/library/ios/#documentation/CoreData/Reference/NSFetchedResultsController_Class/Reference/Reference.html

修改获取请求 您不能简单地更改获取请求来修改结果。如果您想更改获取请求,您必须:

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

看看这是否更有效,而不是破坏控制器并重新加载表。

【讨论】:

在 performFetch 之后表格不会更新,除非我使用 reload 这是我试图避免的。为了实现这一点,我还需要做些什么吗?【参考方案2】:

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

【讨论】:

这行得通,谢谢!它不是 100% 流畅的,因为表格在进入编辑模式的同时也在更新,但我认为它可能是最好的。不过,仍然对为什么其他史蒂夫的建议不起作用感到困惑。

以上是关于从 setEditing 更改核心数据谓词的主要内容,如果未能解决你的问题,请参考以下文章

核心数据获取请求中需要谓词?

带有谓词的 ios 核心数据错误

覆盖 UITableViewController 中的 setEdit:调用从何而来?

使用 NSFetchedResultsController 从核心数据模型中获取谓词到各个部分

我无法根据与谓词的关系从核心数据中获取实体

Cloudkit + 核心数据不同步