问题标签 [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 回答
717 浏览

cocoa - NSTreeController KVO 问题

我有一个 NSTreeController,它的数组绑定到 NSArrayController 子类的“项目”(自定义)属性。由于树控制器未绑定到 NSArrayController 的选择,我需要确保让树控制器知道在数组控制器的选择更改后必须获取项目。

我在 NSArrayController 的子类中完成了以下操作:

这应该是足够的AFAIK。调用了类方法,但似乎没有任何效果。

如果我为它实现一个观察者selectedObjects工作正常:

有什么线索吗?

0 投票
1 回答
6815 浏览

iphone - iPhone - 类 ... 的实例正在被释放,而键值观察仍向其注册

由于 NavigationController,我有一个被推入的 ViewController(带有 MKMapView)。所以我有一个带有“后退”按钮的导航栏。单击该后退按钮,我收到一个错误:

2010-01-11 18:05:35.273 TestApp[147:207] MKUserLocation 类的实例 0x1758f0 正在被释放,而键值观察者仍向其注册。观察信息被泄露,甚至可能被错误地附加到其他对象上。在 NSKVODeallocateBreak 上设置断点以在调试器中停止。这是当前观察信息:(上下文:0x0,属性:0x17d600>)程序接收信号:“EXC_BAD_ACCESS”。

我用观察者实现了 viewDidLoad 方法:

}

我的交易:

谁能告诉我这里有什么问题?我单击 NavBar 中的后退按钮,然后进入 dealloc 方法,然后它切换回更高的 ViewController 并抛出此错误。

非常感谢提前和最好的问候。

0 投票
2 回答
954 浏览

objective-c - 在 Cocoa 中调试 KVO/Bindings 的工具

本着“gdb info gc-roots”的精神,是否有任何工具可以记录给定对象的当前观察者?我发现“gdb info gc-references”可以(在某种程度上)作为其原始目的的副产品来做到这一点,但这不适用于非垃圾收集的应用程序。谢谢!

0 投票
5 回答
8325 浏览

javascript - Javascript 对象键值编码。动态设置嵌套值

我正在开发一个小库,它可以让我对对象进行一些基本的键值编码。假设我有以下对象:

我有以下 JavaScript 函数:

并在使用中:

这可行,但是我想在不使用eval. 这是可能的,还是eval最好的方法?

编辑:

注意可以假设您设置的值存在,至少对于路径深度 - 1。我更关心设置现有对象的值。

0 投票
5 回答
2991 浏览

cocoa - NSArrayController 和 KVO

当调用更新底层数组的方法时,我需要做什么来更新绑定到 NSArrayController 的 tableView?一个例子可以说明这一点。

当我的应用程序启动时,它会创建一个 SubwayTrain。当 SubwayTrain 被初始化时,它会创建一个 SubwayCar。SubwayCar 有一个可变数组“乘客”。初始化地铁车时,会创建乘客数组,并放入几个 People 对象(假设一个名为“ticket collector”的人和另一个名为“homeless guy”的人)。这些家伙总是在 SubwayCar 上,所以我在初始化时创建它们并将它们添加到乘客数组中。

在应用程序的生命周期中,人们上车。在 SubwayCar 上调用“addPassenger”,并将人作为参数传入。

我有一个绑定到 metroTrain.subwayCar.passengers 的 NSArrayController,并且在启动时,我的检票员和无家可归的人表现良好。但是当我使用 [subwayCar addPassenger:] 时,tableView 不会更新。我已经确认乘客肯定已添加到数组中,但 gui 中没有任何更新。

我可能做错了什么?我的直觉是它与 KVO 相关 - 调用 addPassenger 时数组控制器不知道更新(即使 addPassenger 调用 [passengers addObject:]。我可能会出错 - 如果有帮助,我可以发布代码。

感谢任何愿意提供帮助的人。

更新

所以,事实证明我可以通过改变 addPassenger 方法从

我想这是因为我正在使用 [self setSeatedPlayers]。这是正确的方法吗?复制数组、释放旧数组并更新副本(而不是仅仅添加到现有数组)似乎非常麻烦。

0 投票
4 回答
1098 浏览

cocoa - Cocoa 绑定到数组中的单个对象

我之前将此问题发布为对相关线程的评论,认为这很简单。该线程在这里:

Cocoa 绑定到数组控制器中的特定项目

这些问题与我正在构建的一个游戏有关(我将在这里更全面地描述它),以尝试学习objective-c和cocoa。可以把它想象成德州扑克。一台服务器保存游戏信息并管理来自可变数量的客户端(总是不止一个)的输入。通过 cocoa 绑定,它使用 IB 中的数组控制器向每个玩家显示存储在服务器上的数组中的游戏公共信息。想象一下桌子上的五张卡片存储在服务器上的 NSArray 中,并绑定到每个客户端的 NSArrayController 的 content 字段。

这部分工作正常,就像一个魅力。但是,每个玩家都有两张需要保密的牌。每个客户应该根据发给特定玩家的牌显示不同的牌。(因为真正发生的是我绑定到一组玩家对象

想象所有卡片都存储在同一个数组中)。所以我的问题是,如何设置与数组控制器之外的单个对象的绑定(或者我是否需要其他控制器)?也就是说,我如何绑定到 thePlayers 数组的一个玩家?

0 投票
3 回答
2103 浏览

objective-c - 通过 KVC 访问集合(以保护集合并符合 KVO)

我有一个类 Test,它有一个 Foos 数组。我想在不直接暴露 ivar 的情况下提供对 Foos 的访问。我正在尝试使此 KVC 兼容(也为 KVO 兼容铺平道路)。我有:

测试.h

测试.m

当客户端尝试添加 Foo 时,这将进入无限循环:

我究竟做错了什么?

0 投票
2 回答
1185 浏览

objective-c - 删除自己作为观察者时崩溃 - CALayer

当我将自己作为 -(void)dealloc 中的观察者移除时,我的 CALayer 子类发生崩溃:

抛出异常。它说 self 没有被添加为观察者。这只发生在特定情况下,在调用 [CATransaction flush] 之后。

我使用 Instruments 查看对象的分配时间。它说它是通过调用 CALayerGetPresentationLayer() 分配的。我不确定这是如何工作的,但我猜这是我原始层的副本,所以从未调用过 init,也从未将我添加为观察者。

如何在移除自己之前检查我是否是观察者,或者判断我是否是表示层?

布里杰麦克斯韦

0 投票
1 回答
1037 浏览

iphone - Objective-C 键值观察

这似乎不起作用。

这段代码所在的类知道 sessionController 并且可以访问 currentSession。currentSession 的 sessionState 变量是我要观察的。以我在这里所做的方式设置要观察的对象是否被禁止?

如果是这样,这样做的方法是什么?没有给观察对象一个 currentSession 变量。

0 投票
2 回答
457 浏览

cocoa - 这是对可变对多关系建模的良好 KVO 兼容方式吗?

假设我想要一个可变的、无序的多对多关系。出于内部优化的原因,最好将其存储在一个NSMutableDictionary而不是一个NSMutableSet. 但我想将该实现细节保密。

我还想提供一些符合 KVO 的访问器,所以:

现在,为字典提供访问器(当然,在我的实现文件中是私有的)会很方便,也不会那么邪恶,所以:

这对我来说似乎很好!我可以使用访问器keyedThings在类中弄乱我的,但其他对象认为它们正在处理可变的、无序的(未键控!)多对多关系。

不过,根据良好的风格和苹果的认可等等,我担心我正在做的几件事可能是“邪恶的”。我在这里做了什么坏事吗?(例如,不提供 是不对的setThings,因为该things属性据说是可变的?)