ios - 如果核心数据 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)
}
}
解决方案
这取决于您在此类中使用的索引。它并不总是按创建时间排序。因此,如果您使用谓词的偏移属性,它可能正确与否。
要使用流偏移方法,您应该使用 created time 属性对其进行排序以确保正确的结果。
但是为什么你不阻止插入呢?如果记录数超过10,你可以避免插入。你可以实现
func validateForInsert()
避免插入。还有一件事,在你的源代码中,
fetchRequest.returnsObjectsAsFaults = false
应该设置为 true,你不需要获取对象的 unFault 来删除它。