在 iPhone 核心数据中的一对多关系上使用级联删除规则和 validateForDelete

2023-12-06

Preface:

我有两个实体定义为一对多关系:A B。B 与 A 的关系称为 myAs,是一种以 Nullify 作为删除规则的一对多关系。 A到B的逆关系是一对一关系,以Cascade为删除规则。

我已经在 B 类上实现了 validateForDelete,如下所示:

- (BOOL)validateForDelete:(NSError **)error {
    [super validateForDelete:error];
    BOOL validDelete = FALSE;

    if ([self.myAs count] == 0) {
        validDelete = TRUE;
    }

    return validDelete;
}

这样做的目的是仅当不再有 A 对象与其建立关系时才删除对象 B(但如果不再有任何 A 对象与之建立关系,则始终删除 B 对象)。如果我在保存之前手动检查此验证,则 validateForDelete 会按预期工作:在 B 对象删除上:

if ([b validateForDelete:NULL]) {
    //delete b object...
    [context save:&error];
    ...
}

我遇到的问题是当 A 对象删除级联删除 B 对象时。用户无法直接访问 B 对象——它们是通过 A 对象创建和删除的。因此,我的规则是,当不再有 A 对象与之关联时,B 对象将被删除,这一规则必须从 A 对象强制执行——因此删除时会出现级联。

问题是,当我删除 A 对象时,由于级联,会在 B 对象上调用 validateForDelete。我收到已解决的错误:未解决的错误(null),(null),因为我没有手动调用 validateForDelete。

问题):

如何以编程方式从级联删除访问 validateForDelete 调用,以便可以传入错误变量和/或处理 FALSE 的 validateForDelete 结果?

如果上述不可能,我应该如何处理这个用例?还有另一种更实用的方法来实现这一目标吗?

提前致谢。


首先,您对 super 的调用会忽略它的响应,并且它不会对 super 的响应起作用。这通常是一个坏主意。

其次,当你对 validateForDelete 说 NO 时,它会抛出异常,因为删除规则无法完成;在这种情况下级联删除。简而言之,验证方法不是尝试处理这种情况的正确位置。

要处理这种情况,您应该覆盖-prepareForDeletionA 类中的方法,并让它查看任何适合该情况的 B,并根据需要删除它们。您还需要将删除规则更改为无效而不是级联。我将按如下方式实现它:

- (void) prepareForDeletion
{
  [super prepareForDeletion];
  if (![self myB]) return; //I don't have a B
  if ([[[self myB] myAs] count] > 1) return; //Has more relationships
  [[self managedObjectContext] deleteObject:[self myB]];
}

这将检查您是否有 B,如果有,则该 B 是否具有多个关系,如果没有,则将其添加到队列中以进行删除。否则,它将允许 Core Data 取消这种关系。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 iPhone 核心数据中的一对多关系上使用级联删除规则和 validateForDelete 的相关文章

随机推荐

  • 尝试传递 constexpr lambda 并使用它来显式指定返回类型

    我想使用一个函数并传递一个constexpr lambda 但是 只有当我通过以下方式推导类型时 它才会成功编译auto 通过显式给出类型 gt std array
  • XAML 中的 XPath 绑定错误

    我在 XAML 中有一个绑定 Binding XPath List Item Status OK Visual Studio 告诉我它需要 和 但是当我查看其他地方的文档时 这条线看起来不错 它不会编译并给我一个错误 指出成员 List I
  • Oracle SQL 一条语句对多个属性和表进行权限授权

    是否可以在一条语句中对不同的表或属性授予不同的权限 例如我想结合 GRANT SELECT ON tbl TO user and GRANT UPDATE OF attr ON tbl TO user 此外 我可以结合授予不同关系的特权 G
  • 当 QThread 尝试通过 PyGILState_Ensure() 获取 Python GIL 时发生死锁

    我有一个 C Qt 应用程序 我想在其中嵌入 Python 解释器 我想从 QThread 调用 Python 但在调用 PyGILState Ensure 以尝试获取全局解释器锁 GIL 的行处遇到死锁 我将在下面提供一个最小且直接的示例
  • JOptionPane 在不同行上具有多个输入

    我想创建一个JOptionPane允许用户选择要连接的 IP 地址和端口 它的结构应该是这样的 IP 地址 此处的文本字段 端口 此处的文本字段 取消 确定 标签应左对齐 文本字段也应左对齐 我无法在这里真正对故事板进行建模 但基本上文本字
  • Android RecyclerView 复选框会自行检查

    我有一个 RecyclerView 它有一个复选框和文本视图 数字 10 20 30 40 直到 500 应显示在文本视图中 选中的复选框应在文本视图中添加与该复选框对应的数字 例如如果用户仅检查值 10 则 textView 将显示 10
  • Python 2.6 中导入 win32api 错误

    在Windows操作系统 64位 下运行python26时 我有这样的错误 import win32api error in Python 2 6 pywintypes26 dll or pythoncom26 dll missing Im
  • UnboundLocalError:局部变量...在赋值之前引用[重复]

    这个问题在这里已经有答案了 我得到一个UnboundLocalError因为我在 if 语句中使用了未执行的模板值 处理这种情况的标准方法是什么 class Test webapp RequestHandler def get self u
  • 内联元素的 box-shadow

    多行文本位于图像上 文本应该出现在白色背景上 就像胶带一样 文本的每一行的左侧和右侧都需要有一个小的填充 这可以通过内联文本的框阴影来实现 div slide background color black height 200px widt
  • Ruby on Rails:使用 Thin Start --ssl 时,force_ssl 不会从 http 重定向到 https

    我一直在尝试将我的rails项目配置为使用SSL 作为应用程序范围 和thin 通过添加thin gem并放置config force ssl true to application rb 但结果 我遇到了一个恼人的问题 当我使用以下命令启
  • 如何将 flutter windows 应用程序与 firebase 集成? [关闭]

    Closed 这个问题需要细节或清晰度 目前不接受答案 我正在尝试使用 flutter 创建 Windows 应用程序 并且想使用 firebase 进行身份验证并使用 firestore 来存储数据 那么我该如何整合它呢 首先 使用fir
  • 从长形式到宽形式没有 id.var?

    我有一些长格式的数据 如下所示 dat1 data frame id rep LETTERS 1 2 each 4 value 1 8 以表格形式 id value A 1 A 2 A 3 A 4 B 5 B 6 B 7 B 8 我希望它是
  • R 中的舍入误差?

    考虑以下 gt x lt 178379 4999999999999999999999999999999 gt x 1 178379 5 gt round x 1 178380 这似乎是一个基本的舍入错误 R 中是否存在已知的舍入误差 或者是
  • 如何恢复未提交的更改(包括文件和文件夹)?

    是否有 Git 命令可以恢复工作树和索引中所有未提交的更改 并删除新创建的文件和文件夹 您可以运行这两个命令 Revert changes to modified files git reset hard Remove all untrac
  • matplotlib.pyplot 格式字符串 kwarg?

    我正在读matplotlib docs 我正在努力寻找 格式字符串 的关键字参数 或者它只是一个位置参数 这是一个具体的pyplot论点 有点像旧的论点的残余pylab In ro r表示红色 o 表示圆形标记 参数可以这样设置 color
  • 如何验证函数的多个输入?

    我有一个 Validator 类 它允许我们使用 setter 方法设置其成员变量 主要是布尔值 的值 mv1 mv2 mv3 等 让我们将所有这些变量称为 设置 所有 setter 方法都返回此 Validator 而不是通常的 void
  • 使用 LDAP 和组成员身份的 Spring Security

    我正在使用 spring security 来验证用户是否输入了有效的用户名和密码 我还想验证用户是否属于特定组 虽然凭据验证有效 但组成员身份验证无效 我需要配置 ldapAuthoritiesPopulator 吗 虽然凭据验证有效 但
  • 使用 Maven 或 JBoss Tools 在 Eclipse 上添加 JBoss AS 7 模块

    我正在将我的项目迁移到 JBoss AS 7 并且我已经阅读了一些有关其模块的信息 我的问题很简单 我认为 我不知道如何在开发阶段包含这个模块 例如 我使用 hibernate 在 Eclipse 中使用 JBoss Tools 和 JBo
  • 删除除文件名 php 之外的所有内容

    我试图删除文件名 ex 之前的所有内容 home mike whatever test 1 txt 只留下test 1 txt 最简单的方法是什么 thanks basename
  • 在 iPhone 核心数据中的一对多关系上使用级联删除规则和 validateForDelete

    Preface 我有两个实体定义为一对多关系 A B B 与 A 的关系称为 myAs 是一种以 Nullify 作为删除规则的一对多关系 A到B的逆关系是一对一关系 以Cascade为删除规则 我已经在 B 类上实现了 validateF