首页 > 解决方案 > 如果核心数据 swift 5 中的数据数量超过 10,我应该使用哪个谓词?

问题描述

我将数据存储在核心数据中。如果数据超过计数 10,我想删除数据。我不确定如何为此编写谓词

例如。如果我有 20 条记录数据,从 11 到 20 应该删除

我的删除代码就像

func removeOldData(_ removeAfterCount: Int) {
        
        let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "dataTrack")
        fetchRequest.returnsObjectsAsFaults = false
        let predicaate =  ?? how to write predicate for this case

        fetchRequest.predicate = predicaate
        
        let deleteRequest = NSBatchDeleteRequest(fetchRequest: fetchRequest)
        
        do {
            try context.execute(deleteRequest)
            try context.save()
            print("Deleted Old Core data objects from Entity ")
        } catch let error {
            print("Detele Old data in error :", error)
        }
    }

标签: iosswiftcore-data

解决方案


这取决于您在此类中使用的索引。它并不总是按创建时间排序。因此,如果您使用谓词的偏移属性,它可能正确与否。

  • 要使用流偏移方法,您应该使用 created time 属性对其进行排序以确保正确的结果。

  • 但是为什么你不阻止插入呢?如果记录数超过10,你可以避免插入。你可以实现func validateForInsert()避免插入。

  • 还有一件事,在你的源代码中,fetchRequest.returnsObjectsAsFaults = false应该设置为 true,你不需要获取对象的 unFault 来删除它。


推荐阅读