获取与Observer相关的已更改属性的值

时间:2013-06-26 11:42:46

标签: objective-c

我的textFields上有一个观察者,它会查看“enabled @属性是否已更改。

 (void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *) context;
{


UITextField *txtField = (UITextField *)object;




BOOL new = [[change objectForKey:NSKeyValueChangeNewKey] boolValue];
BOOL old = [[change objectForKey:NSKeyValueChangeOldKey] boolValue];


if ((new != old) && (new = YES))
{

 [self fadeDisable:txtField];
}

else if ((new != old) && (new = NO))
{
    [self fadeEnable:txtField];

}

我想如果我使用int new和int old,那么定义是否启用了属性的1或0将被返回但是当我使用NSLog来查看你带回来的内容时,它是一长串数字。

我查看了文档,似乎objectForKey实际上返回的id不是整数,但我不知道该怎么做。

编辑:我已经为我的比较添加了代码,该代码试图确定它是从禁用变为启用(反之亦然)。还按照建议添加了boolValue校正。

它没有给出预期的结果,也没有调用正确的方法。这是对的吗? 感谢

1 个答案:

答案 0 :(得分:1)

NSDictionary包含对象(如NSNumber),而不是基本类型(如int)。你已经注意到了,

[change objectForKey:NSKeyValueChangeNewKey]

返回id。如果要将其转换为int,请使用

int new = [[change objectForKey:NSKeyValueChangeNewKey] intValue]

或者如果属性是BOOL,那就更好了:

BOOL new = [[change objectForKey:NSKeyValueChangeNewKey] boolValue]

这行代码

int new = [change objectForKey:NSKeyValueChangeNewKey]

导致将NSNumber对象的指针值存入new整数,这是你提到的“长串数字”。奇怪的是,它确实在没有警告的情况下进行编译。