【问题标题】:Is it possible to exclude the object with the latest date?是否可以排除日期最晚的对象?
【发布时间】:2015-10-11 11:48:09
【问题描述】:

我有一个核心数据模型,其实体具有“创建日期”属性

我想做的是创建一个包含所有对象但不是最新的获取请求。 当用户查看数据(即 UITableView)时核心数据存储的内容发生变化,我无法设置“最新对象”并将其用于 NSPredicate。

那么有没有办法创建一种格式来排除具有最新日期的数据集?

【问题讨论】:

    标签: ios core-data nspredicate nsfetchedresultscontroller nsfetchrequest


    【解决方案1】:

    是的,您可以使用以下设置构建您的NSFetchRequest

    1. 按日期降序排序
    2. 将偏移量设置为 1

    执行提取,它将跳过第一条记录。

    如果合适,您可以将其加载到NSFetchedResultsController

    【讨论】:

    • 我希望得到答案的人 :) 如果我只按日期排序,那将有效,但用户可以更改排序,因此这将不起作用。我昨天尝试了一些东西,但不确定它是否会长期有效……对于一些测试,它工作正常。我做了什么:我创建了两个 FRC。一个按日期排序,批次限制为 1。另一个执行 Fetch 视图并排除 FRC1 返回的对象。如果 FRC1 有更改,我检查控制器是否更改了委托,如果有更新的对象,如果有,它会触发通知(FRC1 是 MOC 所在的位置)并且 FRC2 谓词已更新
    • 再说一次,我不知道以后有时会不会在背后捅我一刀……但在第一次测试中它起作用了。
    • 刚刚回到这个问题 :) 你的解决方案听起来很合理,我看不出有什么问题。
    【解决方案2】:

    如果您在表格视图中显示结果,您可以操作datasource 以省略最后一个结果。 (您在numberOfRowsInSection 中返回计数减一。)这也应该与获取的结果控制器完美配合。不要忘记修改委托方法。

    如果你只需要一个数组(不推荐),读入一个可变数组并删除第一个或最后一个对象(取决于排序顺序)。当数据发生变化时,只需重新获取并替换数组即可。

    【讨论】:

    • 这不是我想要的解决方案。
    • 1.我使用 NSFetchedResultsController 和它的委托方法来处理数据更改并在 TableView 中设置动画更改 2. NSFetchedResultsController 可以很好地处理数据存储中的更改,我不必“监听”更改 3. 将所有内容放入数组中是浪费记忆。编辑:早点进入……
    • 你可以很好地使用我建议的第一种方法和NSFetchedResultsController。只需相应地修改委托回调即可。
    • 是的,但是我总是需要更正 IndexPath ......你的解决方案毫无疑问是有效的,但这不是我想要的
    • 你真是个难缠的人。那么先做一个countForFetchRequest 然后在FRC 的请求中添加一个fetchLimit 怎么样?你支付两次去商店的罚金,但也许这对你来说没问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-08
    • 2013-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多