NSFetchedResultsController 中的 NSFetchRequest setFetchOffset

Posted

技术标签:

【中文标题】NSFetchedResultsController 中的 NSFetchRequest setFetchOffset【英文标题】:NSFetchRequest setFetchOffset in NSFetchedResultsController 【发布时间】:2010-08-10 19:16:40 【问题描述】:

我想知道我是否应该期望 setFetchOffset 在 NSFetchedResultsController 中工作。

给定一个 UITableView,它显示来自 NSFRC 的这样的行: 1 2 3 4 5

我希望添加这一行:

[fetchRequest setFetchOffset:1];

例如第 207 行: http://github.com/mandersen/FetchOffsetCase/blob/master/Classes/RootViewController.m

会导致 UITableView 行如下: 2 3 4 5

但它不会改变表格中显示的值。

【问题讨论】:

【参考方案1】:

setFetchOffset 仅适用于持久化实体。

我在遇到与 NSFetchRequest setReturnsDistinctResults 类似的挫折时发现了这一点,并找到了 Michael Waterfall 关于该主题的问题:

NSDictionaryResultType expression not taking into account newly inserted objects

【讨论】:

【参考方案2】:

当您说您期望 2、3、4、5 时,您是什么意思?如果您期望索引偏移,那么这是不正确的。它将做的是获取NSFetchRequest 返回的第 2 到第 6 个结果。

【讨论】:

感谢您回复马库斯。鉴于通过 NSFRC 在 UITableView 中显示的 MoC 中的五个实体,我希望设置 fetchOffset:1 会跳过首先排序的实体,然后显示最后四个实体。我惊讶地发现设置 fetch offset 没有任何效果,即 UITableView 中仍然显示五个实体。 上面链接的 Github 项目展示了一个简单的问题案例。构建并运行以查看带有标记为 1、2、3、4、5 的行的 UITableView。尝试更改 RootViewController 的 setFetchOffset 值 ~line 207 并注意它对显示的行没有影响。我的问题是我是否做错了,或者我是否应该期望 offset 完全适用于 NSFRC。 在玩这个时,它似乎确实是一个错误。我可以通过玩-fetchLimit 来强迫它表现得更加奇怪。我会强烈建议您为此提交雷达并在此处报告雷达编号,以便我(以及其他观看此内容的人)可以复制雷达。

以上是关于NSFetchedResultsController 中的 NSFetchRequest setFetchOffset的主要内容,如果未能解决你的问题,请参考以下文章

在 Core Data 应用程序中调用 performFetch 后,是不是需要手动更新表视图?