核心数据 keyPathsForValuesAffectingValueForKey 仅调用关系,而不调用属性

2023-12-02

我正在使用核心数据来建模一个具有属性和关系的实体。我想让其中一个属性依赖于另外两个关系。

核心数据常见问题解答和其他几个示例使用+(NSSet *)keyPathsForValuesAffectingValueForKey:(NSString *)key以此目的。但是,这似乎只针对我的所有关系属性进行调用,而不针对任何属性进行调用。此外keyPathsForValuesAffecting<key>从来没有人因为我的任何特质而被要求。

这是正常行为还是我错过了什么?如何根据其他属性或特性计算一个属性,例如。通过设置 startLocation 和 stopLocation 来确定距离?


看起来几天后我找到了自己问题的解决方案,但事实证明我错过了一些东西。

重读该方法的讨论后keysPathsForValuesAffectingValueForKey: in the NSKeyValueObserving 协议参考,我明白了下面这句话的意思:

当键的观察者注册到接收类的实例时,键值观察本身会自动观察同一实例的所有键路径,并在其中任何一个的值发生变化时向观察者发送键的更改通知关键路径发生变化。

简而言之,您的实例应该有一个观察者来观察您的属性的变化<key>:

[myInstance addObserver:myObserver forKeyPath:attributeKey options:nil context:nil];

一旦你注册了观察者,协议就会调用keysPathsForValuesAffectingValueForKey对于您的特定属性键。如果此方法返回一组非空的关键路径,如果对这些关键路径中的任何一个进行更改,KVO 除了通知您属性的任何直接更改之外,还将发出属性的更改通知。

关系键确实会被自动调用,因为 Core Data 已经使用观察者来保持逆关系最新。

在特定情况下,您希望某个属性依赖于同一实体内的另一个属性或关系,您必须:

  1. 在 awakeFromInsert: 方法中添加一个观察者addObserver:forKeyPath:options:context:
  2. 实施keyPathsForValuesAffectingValueForKey: or keyPathsForValuesAffecting<key>
  3. 实施observeValueForKeyPath:ofObject:change:context让您的属性键路径对相关更改通知起作用,即更新您的属性值。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

核心数据 keyPathsForValuesAffectingValueForKey 仅调用关系,而不调用属性 的相关文章

随机推荐

  • 使用 Powershell Out-Printer 到文件时控制输出位置

    我有一个 Powershell 脚本 它从服务器上的文件夹中检索所有图像文件 jpg png 并将它们 打印 到一个文件 特别是使用特定打印驱动程序的 prn 文件 所有这些都运行良好 问题是我无法弄清楚如何控制 打印 的输出的位置 即它将
  • 如何在 vb.net 中闪烁/闪烁任务栏图标?

    我需要使我的 vb net 应用程序能够在应用程序中收到通知时闪烁 闪烁以吸引用户的注意 就像此图中的 DW 图标一样 我已经在谷歌上搜索了一段时间 并尝试了各种代码示例 但都没有成功 这是我到目前为止所得到的 Public Class F
  • [[NSDate date] keep] 和 [[NSDate alloc] init] 之间的区别

    由于以下两者具有相同的目的 today NSDate date retain and today NSDate alloc init 那么它们之间有什么区别呢 这里的任何事情都与内存分配方法有关 或者其他什么是相应地使用它们的原因 NSDa
  • 如何左右对齐 Flexbox 列?

    使用典型的 CSS 我可以将两列中的一列向左浮动 另一列向右浮动 中间有一些装订线空间 我该如何使用 Flexbox 来做到这一点 http jsfiddle net 1sp9jd32 container width 500px borde
  • Perl:V 5.8.8:在 CentOS5/RHEL5 上找不到 auto/XML/LibXSLT/new.al

    我正进入 状态 无法找到 auto XML LibXSLT new al 我的 CentOS5 机器上安装 Perl 5 8 8 时出错 此问题与 libxml2 和 perl 模块有关XML LibXML XML LibXSLT 对于 1
  • 为什么在函数调用中捕获对象的值?

    当您单击此代码时 应该会弹出一个带有图像编号的警报 for var i 0 i lt 10 i img i click function alert i 你可以看到它不起作用http jsfiddle net upFaJ 我知道这是因为所有
  • DIV 未显示在 Chrome 中

    我刚刚做了一个非常简单的网站 但遇到了问题 在 Firefox 和 Safari 中 我可以看到 id 为 sponsors 的 DIV 但在 Chrome 中它消失了 我在Mac上 有人有解决办法吗 http www tweetup vn
  • 异常:[!]您的应用程序正在使用不受支持的 Gradle 项目

    我正在尝试运行现有的 flutter 应用程序 但收到此异常 我该如何解决这个问题 例外 您的应用程序正在使用不受支持的 Gradle 项目 要解决此问题 请通过运行创建一个新项目flutter create t app
  • HTTP 到 HTTPS 重定向不适用于现有规则

    我已经做了三天了 没有任何结果 我有一个现有的 http 网站 它有很多重定向规则 具体取决于 URL 友好链接 我现在需要强制加载到 https Google 最终会将它们从索引中删除 但有很多指向我的第三方网站页面的链接无法物理改变 下
  • 在 Haskell 中生成斐波那契数?

    在Haskell中 如何根据第n个斐波那契数等于第 n 2 个斐波那契数加上第 n 1 个斐波那契数的性质生成斐波那契数 我见过这个 fibs Integer fibs 1 1 zipWith fibs tail fibs 我不太明白这一点
  • 如何在 R 中提取 1x1 数组切片作为矩阵?

    我正在使用 3D 阵列 函数从用户处获取 2D 数组切片 矩阵 并使用行和列名称 数组的相应暗名称 将其可视化 如果数组维度 gt 1 它就可以正常工作 但是 如果我有 1x1x1 数组 我无法将切片提取为矩阵 a lt array 1 c
  • 左操作数为负数时未定义的行为

    几天前 我在那里参加了微软 GD 实习在线考试 我一直在研究负数左移是一种未定义的行为 但该论文的 30 个问题中几乎有 7 个问题与移位运算符相关 其中大约 5 个问题涉及将负数向左移动 而且他们没有选择说 未定义 行为 看到这一幕我很震
  • 使用 Andengine 绘制圆

    我正在寻找一种使用 Andengine 画圆的方法 正如我所看到的 我只能绘制线条 矩形和放置精灵 但我找不到绘制圆形的方法 我怎样才能做到这一点 事实上 你不能直接画一个圆 替代方案是 渲染具有圆形纹理的四边形 请参见这个链接 例如 渲染
  • 升级后文件丢失

    我安装的是1 1版本 我使用 1 2 版本创建了升级 在这两种产品中我都有 2 个文件
  • 如何拦截提交按钮的点击?

    我有一个表单和一个提交按钮 我想快速检查一些字段 如果未填写某个字段 则空白其他一些字段 我不想更改按钮的 HTML 我只想在 jQuery 中执行此操作 而不向按钮添加任何 onclick 属性 HTML
  • 无效的密钥哈希 facebook android sdk

    我正在尝试使用 Facebook Android SDK 开发一个带有 Facebook 登录按钮的简单应用程序 但我在密钥哈希方面遇到了麻烦 我已经创建了调试密钥和发布密钥 在 mac 中 调试键 keytool exportcert a
  • 给字符串添加空格

    我正在尝试为每个空格添加一个空格 直到column 0 我不知道该怎么做 问题如下 如果你看报纸 你会发现文章的内容很适合专栏 写一个程序 它读取报纸中栏的宽度 然后读取一行文本 对齐文本行以适应 该宽度的列 当你的程序运行时 屏幕应该看起
  • PHP 卷曲,保留会话

    我正在制作一个应用程序 可以从网站上抓取数据 根据需要对其进行格式化 然后将其显示给用户 现在 该站点不允许跨站点脚本请求 因此我使用 PHP 的curl 来检索页面 使用浏览器时 网站会在您首次访问时向您提供 cookie 要求您登录 并
  • 使用 Flexbox 居中时 Safari 不显示 SVG

    我在 Safari SVG 和 Flexbox 方面遇到问题 目标是拥有一个响应式 SVG 保持宽高比 16 9 此外 SVG 应始终位于屏幕的垂直和水平中心 以下代码适用于除 Safari 之外的所有浏览器 我尝试了不同的供应商前缀 但我
  • 核心数据 keyPathsForValuesAffectingValueForKey 仅调用关系,而不调用属性

    我正在使用核心数据来建模一个具有属性和关系的实体 我想让其中一个属性依赖于另外两个关系 核心数据常见问题解答和其他几个示例使用 NSSet keyPathsForValuesAffectingValueForKey NSString key