问题标签 [key-value-observing]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1658 浏览

iphone - 如何 Key-Value-Observe 一个 CALayer 的旋转?

我可以像这样访问值:

但由于某种原因,如果我尝试 KV 观察该密钥路径,则会出现编译器错误。首先,这就是我尝试这样做的方式:

编译器告诉我:

*** 由于未捕获的异常“NSUnknownKeyException”而终止应用程序,原因:“[addObserver:forKeyPath:@"rotation.z" options:0x0 context:0x528890] 被发送到不符合 KVC 的“旋转”对象财产。'

我不明白的是,为什么我可以通过 KVC 密钥路径访问该 z 值,但不能向其添加观察者。这有意义吗?

我还能如何观察该矩阵的 z 值?我不关心矩阵的其他值。只有 z 旋转。还有其他方法可以访问和观察它吗?

0 投票
3 回答
4796 浏览

iphone - KVO 摇滚。现在我如何异步使用它?

我在 KVO 上出售,但如果以明显的方式使用它是同步的。我想在我快速连续触发许多 KVO 消息的情况下使用它,这导致我的应用程序在处理 KVO 消息时停止运行。有人可以建议一种方法 - 也许使用NSOperationNSThread- 可以在这里工作吗?

我的目标是尽可能保留 KVO 的解耦、灵活性。

0 投票
1 回答
968 浏览

uiview - 对 UIView 的 ivars 进行键值编码

我有兴趣在我的 UIView 更改时运行一些方法,无论是通过帧更改还是仿射变换。我最好的想法是通过观察以下值的变化来做到这一点:

myView.framemyView.transform

但是,UIViews 的视图部分不是 Key-Value 投诉。幸运的是视图的模型部分,CALayer 是。所以我设置如下:

在 viewDidLoad: 视图的一部分。我对“框架”键做了同样的事情。但是当视图改变时,无论是通过在它的超级视图中移动视图,还是通过仿射变换,方法:

永远不会被调用。是什么赋予了?有没有更好的方法来观察 UIViews 框架的变化和变换?

0 投票
3 回答
3847 浏览

cocoa - KVC/KVO 和绑定:为什么我只收到一个更改通知?

我看到 Cocoa 的 KVC/KVO 和绑定有一些古怪的行为。我有一个NSArrayController对象,它的“内容”绑定到NSMutableArray,并且我有一个控制器注册arrangedObjectsNSArrayController. 使用此设置,我希望每次修改阵列时都会收到 KVO 通知。但是,KVO 通知似乎只发送一次;第一次修改数组。

我在 Xcode 中建立了一个全新的“Cocoa Application”项目来说明这个问题。这是我的代码:

BindingTesterAppDelegate.h

BindingTesterAppDelegate.m

这是输出:

如您所见,KVO 通知仅在第一次发送(并且在应用程序退出时再次发送)。为什么会这样?

更新:

感谢orque指出我应该绑定到contentArraymy 的NSArrayController,而不仅仅是它的content。只要进行此更改,上面发布的代码就可以工作:

0 投票
1 回答
577 浏览

cocoa - 观察 NSTreeController 的绑定 CoreData 实体以进行插入/删除

我正在创建自己的可绑定自定义树视图。为此,我想观察 NSTreeController 以更新其项目的多对关系。NSTreeController 绑定到 CD 托管对象上下文。每个深度级别都有自己的 CD 实体,带有 parent/children/isLeaf 属性。我需要在视图中保持相同的层次结构(以及子项的顺序)。如果插入了某些东西,我将开始观察它的 children 属性。我当然需要知道新插入对象的索引路径。

我想确切地知道插入/删除了什么,所以我可以开始观察它是否插入/删除了它的孩子。据我了解,执行此操作的标准方法是在observeValue:forKey ...中查看“更改” NSDictionary,但更改为NULL。

我知道这是一个长期存在的错误,但有一些好的解决方法吗?我已经看到一些示例的视图保存数组,然后当模型更改时,您比较差异。树视图更复杂。这种方式也会浪费内存和 CPU 周期。我有一种正在测试的解决方法。它只是一种作品,所以我不会描述它。

0 投票
1 回答
736 浏览

iphone - 如何观察托管对象上下文

每当我在应用程序的第一个选项卡中更改对象时,更新都会在选项卡 2 中自动更新,因为它使用了 fetchedResultsController。现在我有第三个标签也应该更新自己,但我该怎么做呢?

我在第三个选项卡中只有一个 nsmangedObjectContext 来获取适当的数据。每当此上下文中的对象发生更改时,我如何接收通知?

我也在努力解决如何让我的数据获取更有效的问题,因为选项卡 2 和 3 使用相同的数据集。我目前正在选项卡 3 中进行另一次提取,以获取与选项卡 2 相同的数据。我不知道如何在不干扰 fetchedresultscontroller 的情况下使用来自 tab2 的数据。

有关此主题的信息将不胜感激!

0 投票
2 回答
1817 浏览

cocoa - 如何将 NSProgressIndicator 绑定到 NSOperation 的属性?

我有一个反映NSOperation. 我应该如何将 绑定NSProgressIndicatorNSOperation的进度属性?

0 投票
1 回答
134 浏览

cocoa - KVO - 从存储中检索对象并显示版本的问题

我对 KVO 有疑问,我就是不知道它是什么。

我有一个可用于编辑或创建记录的屏幕。该记录由一个模型对象表示,该对象包含许多 NSString 类型的变量。

该字符串的控制器有一个实例变量来保存当前正在处理的模型。当我打开窗口以创建新记录时,我在托管对象上下文中创建了一个新实体,将新创建的实体分配给该实例变量并显示窗口 - 没有问题。

我在模型对象的某些字段中使用手动通知,因为它继承自 NSManagedObject。

但是当我尝试编辑一条记录时——通过从核心数据中获取它并做同样的事情——我得到了错误:[ addObserver:forKeyPath:options:context:] is not supported。关键路径:用户名

NSLogging 对象显示其类型正确。有什么线索吗?

0 投票
2 回答
2373 浏览

cocoa-touch - 观察 UISlider 的值 - iPhone KVO

默认情况下,当我观察 UISlider 的值时,它只更新一次,当单击滑块时,不会连续更新,甚至认为这是滑块的设置。有没有办法获得滑块的连续值变化?

0 投票
4 回答
2274 浏览

objective-c - 帮助键值观察

我需要一些关于 KVO 的帮助,我已经完成了一半。我要做的是在树控制器中的某些内容发生更改时触发一个方法。

所以我正在使用此代码注册为 KVO。

但是当我观察到的关键路径发生变化时,我如何触发一个方法?

一个额外的问题,当我将自己添加为观察者时,我希望关键路径成为我的核心数据模型中的一个属性,我做得对吗?