IOS核心数据删除没有 child 的父记录

标签 ios core-data parent purge

我正在为我的以用户输入的数据为中心的应用程序开发“清除流程”。本质上有一个父实体和一个子实体。如果我“滑动删除”父对象,系统会正确删除子对象。所以这部分正在工作。

现在,我要做的就是遍历并删除所有早于 60 岁的子对象。已标记为“已协调”的日子。将获取和删除请求放在一起应该没有问题。我不知道的是如何获取和删除没有子对象的父对象(超过“60”天)?

我希望我不必遍历整个集合,获取子对象的计数并将该值保存到父对象,然后用“0”删除父对象,但我想这将是我的计划B。数据结束60 天的时间段可能会产生 60-100 个新的父对象和 150-300 个新的子对象,如果用户始终掌握其个人工作相关收入,则子对象通常应在创建后 1-3 周内标记为“已协调”及时处理项目。

父实体主要是字符串(大约 20 个属性),但也有 6 个左右的 BOOL 和小数属性,子实体大约有 6 个字符串、2 个小数和 1 个 BOOL 属性。因此,如果用户不选择性地删除任何内容,我不确定在一年的典型使用情况下,数据库大小会转化为什么。

我认为归档过程没有任何必要,因为从长远来看,这些信息并不“重要”。但是,我不能指望我的目标受众会在适当的时候手动“滑动删除”父对象作为一种习惯,这意味着如果不实现清除过程,数据集将随着时间的推移而变得很大。

是否有简短的响应来提供 Core Data 将响应的通用方法或方法/sql 语法?或者我应该从不同的角度来解决这个问题?提前致谢。

最佳答案

删除子记录后,您可以执行查询以检索具有给定条件的父记录,并循环遍历每个返回的父记录并将其删除。获取请求如下所示:

NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"ParentEntity"];
request.predicate = [NSPredicate predicateWithFormat:@"date < %@ AND children.@count == 0", olderThan60Days];
request.includesPropertyValues = NO; // don't really care about these since it's for deletion

NSError *error;
NSArray *recordsToDelete = [context executeFetchRequest:request error:&error];

执行fetch请求,将返回的每个对象一一删除。

关于IOS核心数据删除没有 child 的父记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18563033/

相关文章:

ios - Swift:我必须调用 Facebook 登录按钮两次才能获取 FBSDKAccessToken

ios - UITableView的 subview 永远不会显示

ios - 有必要实现imagePickerControllerDidCancel吗?

ios - 类型 'Binder<UIImage?>' 的值没有成员 'bind'

ios - core data中的transient, indexed, index spotlight和store in external Record file是什么?

ios - 在同一项目中使用私有(private) Pod 和公共(public) Pod

ios - CoreData 无法生成 getter 和 setter

input - jQuery。元素宽度取决于其父宽度

jQuery 检测上述未知级别的父级?

包含链接的 div 的 Javascript dom 子级