0

我的 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 校正。

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

4

1 回答 1

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整数,这就是您提到的“长数字串”。奇怪的是,它编译时甚至没有警告。

于 2013-06-26T12:17:34.413 回答