问题标签 [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 投票
4 回答
24536 浏览

iphone - 如何监听 UIButton 状态变化?

我正在扩展UIButton通用功能以根据显示的标题更改某些外观属性。

为此,我需要检测并响应“状态”属性的变化。如果用户为不同的状态设置了不同的标题,我会确保正确调整外观。我假设我需要使用某种 KVO,如下所示:

但这似乎不会触发 @"state" 或 @"currentTitle" 的 observeValueForKeyPath:... 方法。我认为这是因为 UIButton 没有为这些属性实现 KVO 模式。

我不想只听点击。这些事件会导致状态变化,但不是唯一的潜在原因。

有谁知道一种方法来监听和响应 UIButton 的状态变化?

谢谢


更新

只是一个说明,因为我在过去几年中学到了一些东西;)。

从那以后,我与一些知道的 Apple 人员进行了交谈,KVO 不适用于 state 属性的原因是UIKit 的NONE保证符合 KVO 的事实。认为这值得在这里重复——如果您尝试监听UIKit 框架类的任何属性,请注意它可能有效但不受官方支持,并且可能会在不同的 iOS 版本上中断。

0 投票
1 回答
2375 浏览

caching - 组织内存缓存键

我试图找到一种处理 memcache 密钥的好方法,以便以更文明的方式存储、检索和更新缓存层的数据。

找到了这个模式,看起来很棒,但是如何将它变成 PHP 应用程序的功能部分?

身份映射模式:http ://martinfowler.com/eaaCatalog/identityMap.html

谢谢!

更新:有人告诉我修改后的 memcache (memcache-tag) 显然做了很多这样的事情,但我无法在我的 windows 开发盒上安装 linux 软件......

0 投票
3 回答
865 浏览

iphone - UITextField valueDidChange-Event

Is there a way to catch a "valueDidChange"-Event for a Textfield? oO

I've got a modalView with an UITextField.

When the UITextField is empty, the "Done"-Button in the NavigationBar should be disabled and when there is Text entered, it should become enabled.

Right now the only way to accomplish this by using the "textFieldShouldReturn"-Method. This works but is simply horrible for usability.

Isn't there a way to check the requirements every time a letter is being entered or removed?

0 投票
1 回答
1176 浏览

iphone - 在 iPhone 上处理启用/禁用 UIButtons 的最佳方法

我有一个增加按钮和一个减少按钮,这两个按钮都会影响一个变量。该变量有一个最小值,一旦达到最小值,减小按钮将被禁用。同样对于变量的最大值。在我的控制器中,我有两个用于增加和减少操作的 IBAction,以及两个 IBOutlets,以便相应地禁用按钮。在处理值更改的 KVO 语句的底部,我有:

虽然这段代码是功能性的,但我不禁觉得这是解决问题的一种幼稚方法,尤其是因为这需要 4 个连接。有没有更好的解决方案,使用更少的连接?

0 投票
1 回答
2428 浏览

cocoa - 如何观察 NSScroller 的变化?

我有一个NSScrollView子类,我想NSView根据当前滚动位置更新另一个。我尝试过 KVC 观察valueof[self horizontalScroller]但从未被调用。

您是否在我的推理中看到错误或知道如何观察滚动的更好方法NSScrollview

0 投票
1 回答
8332 浏览

iphone - 未调用 observeValueForKeyPath

我有一个 ViewController 创建一个 UIView 的实例,然后我用该实例注册一个观察者,这样

然后,在同一个文件中,我有:

但是,尽管我已经检查并仔细检查了 logoAnimation.patrocinioDidLoad 是否已更改,但 observeValueForKeyPath 永远不会被调用...

我错过了什么吗?

谢谢您的帮助!

安东尼奥

0 投票
1 回答
1693 浏览

objective-c - KVO 表示 KVO 观察者已注册,即使它没有(或者是?)

当我的应用程序关闭时,主控制器类将自己作为观察者从模型中删除,然后释放模型。像这样:

在那之后,调试器说:

2010-04-29 14:07:40.294 MyProgram[13678:a0f] TheModel 类的实例 0x116f2e880 被释放,而键值观察者仍向其注册。观察信息被泄露,甚至可能被错误地附加到其他对象上。在 NSKVODeallocateBreak 上设置断点以在调试器中停止。这是当前观察信息:
<NSKeyValueObservationInfo 0x100288450>(
<NSKeyValueObservance 0x1002aca90:观察者:0x116f40ec0,键路径:myValue,选项:<新:是,旧:否,先验:否> 上下文:0x0,属性:0x116f80430>

哪里0x116f2e880确实是模型,0x116f40ec0确实是控制器。

当控制器刚刚将自己移除为观察者时,它如何仍然是观察者?

0 投票
1 回答
1136 浏览

cocoa - 使用 Cocoa Bindings 和 NSArrayController 观察模型变化

NSArrayController在控制器中绑定了一个可变数组,该数组管理我的模型对象数组。数组控制器绑定到我的 UI。它运作良好。

现在我试图手动观察我的控制器类中我的模型中的值何时发生变化(基本上我将更改后的模型标记为“needsToSave”以备后用,但是当它发生变化时我还有一些其他任务)。

我已经阅读了 KVO,但我不完全确定我需要观察什么...... NSArrayController?对象数组?每个模型对象本身?混乱。

任何指针都会非常有帮助。提前致谢!

0 投票
2 回答
3022 浏览

core-data - 更新 CoreData 中的 NSDictionary 属性未保存

我在 CoreData 中创建了一个实体,其中包括一个实现为 NSDictionary 的 Transformable 属性类型。NSDictionary 属性仅包含自定义类的值。自定义类的属性都是 NSString 类型。自定义类符合 NSCoding 实现:

-(void)encodeWithCoder:(NSCoder*)编码器;

-(id)initWithCoder:(NSCoder *)coder

第一次保存实体时,包括 Transformable (NSDictionary) 类型在内的所有属性都正确保存在数据库中。当从数据库中获取同一个实体并更新(包括 Transformable 属性)时,它似乎已正确更新。但是,当应用程序关闭然后重新打开时,虽然 NSDate 和 NSString 类型的其余属性是最新的,但获取实体并不会显示更新的 Transformable 属性类型。Transformable 属性是原始保存的值,而不是更新后的值。

这是 KVO 的问题,还是我在尝试将填充了自定义类的 NSDictionary 保存到 CoreData 时遗漏了其他内容?

0 投票
1 回答
800 浏览

iphone - iPhone OS:KVO:为什么我的观察者只在 applicationDidfinishLaunching 收到通知

我基本上是在尝试在我的应用程序中实现成就跟踪设置。

我有一个名为 StatTracker 的 managedObjectModel 类来跟踪各种统计信息,我希望在这些统计信息发生更改时通知我的成就跟踪类,以便我可以根据值检查它们并查看用户是否获得了成就。

我试图暗示 KVO,我认为我已经接近实现它,但我遇到的问题是:

因此,在 appDelegate 中,我的成就跟踪器类有一个 Ivar,我将它作为观察者附加到 applicationDidFinishLaunching 方法中我的 statTracker 核心数据实体的属性值。

我知道它建立了连接,因为我已经能够在我的 AchievementTracker 实例中触发 UIAlert,并且我已经放置了几个日志语句,只要 StatTracker 的属性值发生变化就应该触发这些语句。日志语句仅在应用程序启动时出现一次。

我想知道我是否在整个对象生命周期方案中遗漏了一些东西,我只是不明白为什么观察者在 applicationDidFinishLaunching 方法运行后停止收到更改通知。它是否与AchievementTracker 引用的范围有关,或者更可能是该方法完成后对我的核心数据StatTracker 的引用将消失。

如果是这样的话,我想我不确定放置这些的正确位置。希望得到一些帮助。这是我在 appDidFinishLaunching 方法中添加观察者的代码:

这是我的核心数据单例中的代码:

}

和我的成就追踪器: