gpt4 book ai didi

ios - Cocoa Core Data - 检查具有相同属性的对象是否已经存在的最佳实践

转载 作者:行者123 更新时间:2023-11-28 07:14:21 30 4
gpt4 key购买 nike

我想与您一起检查在 Core Data 框架中解决以下任务的最佳实践。在我的模型中,一种对象类型的属性之一必须是唯一的。假设我有对象帐户 - 属性名称必须是唯一的 - 不允许有 2 个同名帐户。

有两种可能性:

我个人喜欢第二种情况,因为我的验证将在模型中进行。但问题是此时对象已经插入到上下文中,因此如果我调用 fetch,验证总是失败,因为新对象的名称也很重要(即使仍然没有永久保存)。但是,有一个解决方案。我可以通过创建新的临时托管对象上下文并调用 fetch 来检查永久保存的对象

这是执行此类验证的最佳做法吗?还是我遗漏了什么或有更好的方法?

BR鲁博斯

最佳答案

我会按照以下方式进行。通常,建议避免多个上下文的复杂性,尽管这也是 Apple 演示的模式。

创建新的托管对象,将其插入到上下文中。检查现有名称。如果名称无效,提示输入不同的名称。重复直到名称有效。如果用户中断进程或超时,则删除该对象。

如果您可以在保存之前做到这一点,那么丢弃对象就像调用 [context rollback]; 一样简单。

如果您在单独的 Controller 中执行此操作,则可以在子上下文中执行此操作。如果用户终止进程,您只需完全丢弃上下文而不保存。

如果您发现一个名称存在但怀疑它是正在创建的名称,您可以轻松地检查它是否是同一个对象(您已经有对它的引用)。您还可以使用排除此特定对象的谓词进行提取(或者更有效地 countForFetchRequest)。

NSPredicate(format:"name = %@ && (not self = %@)", account.name, account)

关于ios - Cocoa Core Data - 检查具有相同属性的对象是否已经存在的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27026473/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com