问题标签 [key-value-coding]

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 投票
2 回答
4160 浏览

iphone - 在哪些情况下对象不符合键值编码?

目前我正在学习有关键值编码的所有内容。

他们在文档中说:

键路径序列中的任何不符合相应键的键值编码的对象都会收到 valueForUndefinedKey: 消息。

我试着想象一个对象不符合键值编码的情况。怎么会这样?当我子类化 UIView 时,这显然是合规的,对吧?但是当我只是用 NSObject 作为超类创建自己的对象时,那是怎么回事?当我创建一个没有超类的类时,那么确定这不符合 kv 吗?

0 投票
1 回答
997 浏览

iphone - 为什么在访问对象属性时应该使用 KVC 而不是简单的点语法?

如果接收器类符合 NSKeyValueProtocol,则可以选择走很长的路:

或捷径:

这种 KVC 方法的意义何在?这什么时候有用?

0 投票
2 回答
33830 浏览

objective-c - NSDictionary 设置值:

好吧,这快把我逼疯了——请告诉我我没有疯掉!

我声明:

我是我的.h

我初始化:

在视图中会出现

我设置:

在一个方法中:

我得到“NSMutableDictionary 可能无法响应 setValue:forkey:”,并且应用程序在运行时崩溃。

请帮忙 :(

0 投票
1 回答
4626 浏览

objective-c - 在 NSPredicates 中使用关键路径

我有一个包含(我的自定义)GTPerson 对象的 NSDictionary。GTPerson 有一个NSMutableSet *parents属性,我在其上使用@propertyand @synthesize

在我的 NSDictionary 中,我想过滤所有没有任何父母的 GTPerson 对象,即父母的数量为 0。

我正在使用以下代码:

当我执行此操作时,我收到以下错误:

[<GTPerson 0x18e300> valueForUndefinedKey:]: this class is not key value coding-compliant for the key count.

Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<GTPerson 0x18e300> valueForUndefinedKey:]: this class is not key value coding-compliant for the key count.'

为什么它试图调用countGTPerson 而不是它的parents属性?

0 投票
1 回答
551 浏览

objective-c - 在 Objective-C 中使用键值编码访问常量

我正在制作一个有很多常量的程序。我决定将它们全部放入一个单独的类中,并通过需要它的类来导入它。这些文件看起来与此类似

我想要做的是使用键值编码访问它们。到目前为止我所尝试的都没有奏效。

但我可以执行以下操作,并且效果很好。

这似乎毫无意义,但我有很多变量必须以“CostForBuilding”结尾,而我需要它的函数只获取字符串的第一部分。例如,“base”、“max”、“intermediate”等。然后它将与“CostForBuilding”或其他内容结合起来以获取变量名称。

如果这是可能的,那么只有一两行代码而不是多个 if 语句来访问正确的变量会更好。有谁知道这样做的方法?提前致谢。

0 投票
1 回答
729 浏览

core-graphics - 可可绑定和 KVC 与 CGColorRef

我正在尝试将CGColorRef我的一个对象上的 a 绑定到 a 的 " shadowColor" 属性CALayer。不幸的是,我无法弄清楚这一点 - 这可能非常简单!

CGColorRef 被实现为一个属性:

我的绑定也很简单:

我要解决的问题是valueForUndefinedKey:- 我将如何实现这一点CGColorRef?我目前正在获取样板:

我可以通过NSColor在两端放置一个属性并在颜色更改时手动设置CALayershadowColor”来解决此问题,但这似乎不优雅。

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。只要进行此更改,上面发布的代码就可以工作: